尝试将 Twilio webhook 发送到 Kommo crm

问题描述 投票:0回答:1

关于这个问题的一些信息。我使用 Kommo Crm (Amo Crm) 进行工作。 内部集成允许我通过 Twilio 接受和发送文本,但那东西不会向我显示收入图像。所以我需要做一个定制的解决方案。我决定在我的谷歌应用程序上处理图像。

所以我需要 twilio 发送 2 个 webhook。 1 个到 kommo(用于继续接收消息)和 1 个到我的应用程序。

现在 1 个 kommo 的 webhook 可以工作。这是设置(图1settings) 这是通过“消息服务”-“集成”-“webhook url”完成的

所以我将“webhook url”更改为我的应用程序 url,并尝试将钩子转发到 Kommo。我的应用程序收到了钩子,然后钩子被转发到 kommo 但它没有通过。该消息不会显示在 Kommo 中。尝试了不同的方法。它显示响应 200(成功),但消息没有出现。

然后我发现了这个 twilio 函数,它通过 axios 发送 2 个 webhook。

const axios = require('axios');
const qs = require('querystring');

exports.handler = function(context, event, callback) {

  let twiml = new Twilio.twiml.MessagingResponse();

  let { 
      ApiVersion,
      SmsSid,
      SmsStatus,
      SmsMessageSid,
      NumSegments,
      ToState,
      From,
      MessageSid,
      AccountSid,
      ToCity,
      FromCountry,
      ToZip,
      FromCity,
      To,
      FromZip,
      ToCountry,
      Body,
      NumMedia,
      FromState 
  } = event;

  let requestBody = {
      ApiVersion,
      SmsSid,
      SmsStatus,
      SmsMessageSid,
      NumSegments,
      ToState,
      From,
      MessageSid,
      AccountSid,
      ToCity,
      FromCountry,
      ToZip,
      FromCity,
      To,
      FromZip,
      ToCountry,
      Body,
      NumMedia,
      FromState 
  };

console.log('Test '+ Body);

    let url1 = "https://chatstwilio.amocrm.com/twilio_sms/webhook/twilio_message/incoming";
    let url2 = "https://script.google.com/macros/s/AKfycbyrFMmuBDpjBIV05vD2utzL9v5au_hlcHbIA4uj7D09JkKW4XiDW9FoW/exec?fn=twiliomedia";

   const config = {
     headers: {
     'Content-Type': 'application/x-www-form-urlencoded'
     }};

  Promise.all([
       axios.post(url1, qs.stringify(requestBody), config),
       axios.post(url2, qs.stringify(requestBody), config)
       ]).then(result => {
           callback(null, twiml);
       }).catch(err => {
           console.log(err);
           callback(err);
       });
};

它发送钩子,我的应用程序收到它,但 kommo 没有。

我认为问题出在标题中。 X-Twilio-签名。 或者也许是别的什么。我不知道。

你有什么建议?如何让twilio发送2个原始的webhooks?

总共:

  1. Twilio 原创 webhook 通过“消息服务”-“集成”-“webhook URL”制作,完美地将消息传递到 Kommo CRM。
  2. 如果我将“webhook URL”更改为我的自定义“twilio 函数”,它将停止传递到 Kommo。

请帮忙。 在完美的情况下,我需要在 Kommo 中获取消息并在我的 google web 应用程序中处理图像。

twilio twilio-api
1个回答
0
投票

所以我一晚上没睡觉,并提出了如何从 twilio 发送 2 个或更多原始 webhook 的解决方案。搜索关键词:如何转发 twilio webhook、如何发送自定义 twilio webhook

不要忘记输入您自己的 authToken,https://your.site/webhook

const webhooks = require('twilio/lib/webhooks/webhooks');
const { default: axios } = require('axios');

async function makeTwiMLBinRequest(url, data) {
  //console.log('inside');
  const authToken = 'XXXX'; // YOUR authToken 

  let eventData = {};
  //console.log('Data received: '+data);

  //delete request.headers from the webhook.
  delete data.request;
  
  eventData = data;
  //console.log('eventData received: '+eventData.toString());

  // Construct a valid application/x-www-form-urlencoded POST body
  const params = new URLSearchParams();
  for (const [key, value] of Object.entries(eventData)) {
    params.append(key, value);
  }
  data = params.toString();

  //console.log('Data to send: '+data);

  // Generate the X-Twilio-Signature
  const signature = webhooks.getExpectedTwilioSignature(
    authToken,
    url,
    eventData
  );
  
  //console.log('Sign: '+signature);

  const headers = {};
  headers['X-Twilio-Signature'] = signature;
  headers["user-agent"] = "TwilioProxy/1.1";
  headers["accept"] = "*/*";
  headers["x-home-region"] = "us1";
  headers["content-type"] = "application/x-www-form-urlencoded";
  
  //console.log(headers.toString());

  // Make the HTTP request to the passed URL
  const response = await axios.request({
    method: 'POST',
    headers,
    url,
    data
  })
  
  //console.log('Resp: '+response.data);
  return response.data;
}

exports.handler = async (context, event, callback) => {
// Make an HTTP request to your TwiML Bin
//console.log("Invoked with: ", event);
//forward twilio hook to kommo
const webhook1 = await makeTwiMLBinRequest('https://chatstwilio.amocrm.com/twilio_sms/webhook/twilio_message/incoming', event);

const webhook2 = await makeTwiMLBinRequest('https://your.site/webhook', event);

return callback();
}
© www.soinside.com 2019 - 2024. All rights reserved.