2017-07-11 175 views
0

在通話結束時,我想發送帶有鏈接的短信,以便將通話記錄到來電者和控制號碼。Twilio:短信不發送

我有兩個TwiML箱。第一個處理撥號和錄音,然後將呼叫轉到第二個存儲箱。這很好。

<?xml version="1.0" encoding="UTF-8"?> 
<Response> 
    <Dial record="record-from-ringing-dual" timeLimit="600" action="https://handler.twilio.com/twiml/XXXXXXXXXXXXXXX"> 
    <Number>{{Digits}}</Number> 
    </Dial> 
</Response> 

這裏的第二倉:

<?xml version="1.0" encoding="UTF-8"?> 
<Response> 
    <Sms from="+XXXXXXXXX" to="{{From}}">Here's the recording of your call: {{RecordingUrl}}</Sms> 
    <Sms from="+XXXXXXXXX" to="+YYYYYYYYYY">Call recorded from {{From}} to {{To}}.</Sms> 
</Response> 

從日誌中,我看到了TwiML倉成功調用。狀態代碼是200.正確替換了{{發件人}}號碼。

但是,沒有發送短信。 SMS日誌中沒有SMS。如果我自己打電話,不會收到短信。儘管如此,通話記錄或調試器中不會顯示錯誤消息。

回答

1

Twilio開發人員傳道這裏。

正如我們在其他問題中所討論的,<Sms>在引擎蓋下使用了不建議使用的SMS/Messages資源。因此它不具有良好的日誌記錄。

我推薦使用Messages resource of the REST API to send messages來代替。你不能用TwiML Bin來做,但你可以用Twilio Functions

config section for Functions請確保勾選了「啓用ACCOUNT_SID和AUTH_TOKEN」複選框。 Create a new Function in your Twilio console並輸入以下代碼(替換爲實數的佔位符):

exports.handler = function(context, event, callback) { 
    const client = context.getTwilioClient(); 

    const message1 = client.messages.create({ 
    from: YOUR_TWILIO_NUMBER, 
    to: event.From, 
    body: `Here's the recording of your call: ${event.RecordingUrl}` 
    }); 

    const message2 = client.messages.create({ 
    from: YOUR_TWILIO_NUMBER, 
    to: THAT_OTHER_NUMBER, 
    body: `Call recorded from ${event.From} to ${event.To}.` 
    }) 

    Promise.all([message1, message2]).then(() => { 
    let twiml = new Twilio.twiml.VoiceResponse(); 
    callback(null, twiml); 
    }, err => { 
    callback(err); 
    }) 
}; 

給功能的路徑,然後複製整個URL,並把它作爲你的第一個TwiML斌在<Dial> action屬性。

讓我知道這是否有幫助。

+0

再次嘿!好的,效果更好,根本問題是第一個數字沒有正確的地理權限。現在至少另一條消息正確發送。但是,由於地理權限導致第一條消息失敗的事實不會顯示在調試器,通話記錄或SMS日誌中。它只出現在功能日誌中,當我刷新頁面時,它會刷新。這是正常的嗎? – MasterScrat

+0

那麼,從這個函數進行HTTP調用就像是從你自己的服務器進行HTTP調用,所以錯誤不會出現在調試器,通話記錄或短信日誌中。我只是找出功能日誌是否存儲在任何地方進行審查。 – philnash

+0

我聽說隨着函數在公共測試階段的推進,歷史日誌已經進入路線圖。所以你將能夠看到這些日誌中的錯誤。 – philnash