Редактирование Twilio TwiML с использованием API или HTTP POST - PullRequest
0 голосов
/ 27 мая 2019

Моя компания использует Twilio Flex в качестве нашей телефонной системы, и недавно мне было поручено настроить функцию, которая позволит нам редактировать голосовое сообщение TwiML, которое воспроизводится перед нашим обычным голосовым сообщением.Это сообщение TwiML будет изменено через бота Twilio, который я опубликовал в наших командах Microsoft.

Причина этого заключается в том, что наша служба поддержки может добавить короткое сообщение в строках «В настоящее время у нас возникают проблемы с X» перед нашим обычным сообщением «Добро пожаловать в [Компания] поддержка».

Если TwiML можно редактировать с использованием HTTP POST / PUT или API Twilio, это должно быть тривиальным вопросом, но до сих пор я не смог выяснить, как.

Я не смог найти ни одногоссылка на это в API doc , поэтому я решил, что HTTP POST будет подходящим вариантом.Используя это как отправную точку, я могу получить свой TwiML, используя HTTP GET:

https://support.twilio.com/hc/en-us/articles/223132187--Not-Authorized-error-when-trying-to-view-TwiML-Bin-URL

const axios = require('axios');
const crypto = require('crypto');
const accountSidFlex = process.env.accountSidFlex;
const authTokenFlex = process.env.authTokenFlex;

var URL = 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + '?AccountSid=' + accountSidFlex
    var twilioSig = crypto.createHmac('sha1', authTokenFlex).update(new Buffer(URL, 'utf-8')).digest('Base64')
var config = {
    headers:{
    'X-TWILIO-SIGNATURE': twilioSig
    }
}

axios.get(
    URL,config  
).catch(error => console.log(error))
.then(response => {
    console.log(response.data)
})

response.data показывает текущее XML-содержимое TwiML.

Мои попытки POST дают только тот же результат, что и GET, в то время как PUT дает метод 405. Not Allowed.

var URL = 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + '?AccountSid=' + accountSidFlex
var twilioSig = crypto.createHmac('sha1', authTokenFlex).update(new Buffer(URL, 'utf-8')).digest('Base64')

var config = {
    headers:{
    'X-TWILIO-SIGNATURE': twilioSig,
    'Content-Type': 'text/xml'
    }
}

var xml = 
'<?xml version="1.0" encoding="UTF-8"?>\
<Response><Play digits="www"/>\
<Say voice="alice">"We are currently experiencing X related issues". </Say>\
</Response>';

axios.post(
    URL,xml,config
)
.catch(error => console.log(error))
.then(response => {
    console.log(response.data)
})

В идеале я хотел бы иметь возможность изменить определенный TwiML, используя либоHTTP-методы или Twilio-API, чтобы мы могли использовать их в Studio Flow.Мы просто молчим, пока не добавим что-то к нему, и вернемся к молчанию, когда проблемы пройдут.

Любая помощь будет признательна!

1 Ответ

1 голос
/ 27 мая 2019

В настоящее время вы не можете программно изменять содержимое ячеек TwiML, Studio Flows или функций Twilio.Я считаю, что ключевая функциональность, которую вы ищете, - это способ динамического обновления сообщений (Say / Play Widget) в потоке Studio на основе некоторых условий.

Один из способов - использовать виджет функций для извлечения Twilio.Синхронизируйте документ для сообщения, возвращая сообщение в формате JSON, и виджет Say / Play воспроизводит это сообщение.Вы можете найти примеры Twilio Sync REST API для добавления, изменения и получения в связанном документе.

Вы можете получить проанализированный ответ, используя переменный синтаксис, подробно описанный здесь, https://www.twilio.com/docs/studio/widget-library#run-function.

...