Twilio-клиент Javascript: ошибка: вызовите Device.setup () перед подключением - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь использовать Programmable Voice API для звонка со своей страницы (Реагировать) Следуя официальному руководству. И есть странная ошибка.

Итак, при монтировании компонента я проверяю наличие токена и затем использую его для настройки устройства подключения

import { Device } from 'twilio-client';

.....

в компоненте:

    let device = new Device();

    const [callState, setCallState] = useState({
        muted: false,
        log: 'Connecting...',
        onPhone: false,
        currentNumber: '',
        isValidNumber: false,
        active: false
    })


....


    useEffect(() => {
        console.log('Doing some stuff on Component mount')
        if (token) {
            device.setup(token, { closeProtection: true });
            setCallState(prevState => ({
                ...prevState,
                active: true
            }));
        } else {
            //GET TOKEN
        }

        // Configure event handlers for Twilio Device

        //TODO: Outdated bit, for change 
        device.disconnect(() => {
            setCallState(prevState => ({
                onPhone: false,
                log: 'Call ended.'
            }));
        });

        device.ready(() => {
            setCallState(prevState => ({
                log: 'Connected'
            }));
        });


    }, [token])

Затем в Обработчик вызова, я звоню device.connect следующим образом:

    const handleToggleCall = () => {
        if (callState.onPhone) {
            device.disconnectAll();
            setCallState(prevState => ({
                ...prevState,
                onPhone: false
            }));

        } else {
            device.connect({ number: "SOME NUMBER" });
            setCallState(prevState => ({
                ...prevState,
                muted: false,
                onPhone: true
            }));
        }
    }

Когда я звоню handleToggleCall, я получаю эту ошибку:

Error: Call Device.setup() before connect

, указывая на Device.__throwUnlessSetup.

private _throwUnlessSetup(methodName: string) {
      if (!this.isInitialized) { throw new InvalidStateError(`Call Device.setup() before ${methodName}`); }
}

Как я понял, он не был успешно инициализирован, даже думал, что в соответствии с вкладкой сети он запросил все файлы dhtm в качестве дополнительного доказательства инициализации.

...