簡體   English   中英

您如何使用 Node.JS 從 Twilio 接收 Whatsapp 消息?

[英]How do you receive Whatsapp messages from Twilio using Node.JS?

我正在嘗試使用 Node.JS 構建一個 Whatsapp 聊天機器人,並且在接收來自 Twilio 的 Whatsapp 消息時遇到了一些麻煩。 在檢查調試器時,我得到一個 Bad Gateway 錯誤,即。 錯誤 11200:HTTP 檢索失敗。 消息正在發送,ngrok 顯示發布請求,但是,dialogflow 沒有收到請求。 在終端上,錯誤顯示 UnhandledPromiseRejectionWarning: Error: 3 INVALID ARGUMENT: Input text not set。 我不確定是不是因為消息不是 JSON 格式。 請幫忙!

這是 app.post function:

app.post('/api/whatsapp_query', async (req, res) =>{
        message = req.body;
        chatbot.textQuery(message.body, message.parameters).then(result => {
            twilio.sendMessage(message.from, message.to, result.fulfillmentText).then(result => {
                console.log(result);
            }).catch(error => {
                console.error("Error is: ", error);
            });
            return response.status(200).send("Success");
        })
    });

這是我導入的 sendMessage function:

const config = require('./config/keys');

const twilioAccountID = config.twilioAccountID;
const twilioAuthToken = config.twilioAuthToken;
const myPhoneNumber = config.myPhoneNumber;

const client = require('twilio')(twilioAccountID,twilioAuthToken);

module.exports = {
    sendMessage: async function(to, from, body) {
        return new Promise((resolve, reject) => {
            client.messages.create({
                to,
                from,
                body
            }).then(message => {
                resolve(message.sid);
            }).catch(error => {
                reject(error);
            });
        });
    }
}

這是我導入的 textQuery function:

textQuery: async function(text, parameters = {}) {
        let self = module.exports;
        const request = {
            session: sessionPath,
            queryInput: {
                text: {
                    text: text,
                    languageCode: config.dialogFlowSessionLanguageCode
                },
            },
            queryParams: {
                payload: {
                    date: parameters
                }
            }
        };
        let responses = await sessionClient.detectIntent(request);
        responses = await self.handleAction(responses)
        return responses[0].queryResult;
    },


Twilio 開發人員布道師在這里。

問題是您沒有將傳入 WhatsApp 消息中的正確消息正文傳遞給您的textQuery function。

首先,您應該確保將從 Twilio 傳入的 webhook 視為application/x-www-form-urlencoded 如果您使用的是 body-parser,請確保您已打開 urlencoded 解析。

app.use(bodyParser.urlencoded());

其次,Twilio發送的參數以大寫字母開頭。 因此,您的代碼當前獲取message = req.body ,然后使用message.body 但它應該是message.Body

這兩點應該可以解決您的問題。

最后一件事。 Twilio Node.js 庫將返回 Promise 如果您不傳遞回調 ZC1C425268E68385D1AB5074.C 所以你不需要在這里創建 Promise:

module.exports = {
    sendMessage: async function(to, from, body) {
        return new Promise((resolve, reject) => {
            client.messages.create({
                to,
                from,
                body
            }).then(message => {
                resolve(message.sid);
            }).catch(error => {
                reject(error);
            });
        });
    }
}

您可以將調用結果返回給client.messages.create

module.exports = {
    sendMessage: async function(to, from, body) {
        return client.messages.create({ to, from, body });
    }
}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM