电报(最简单)内联机器人在iOS上发送照片2次

电报(最简单)内联机器人在iOS上发送照片2次,ios,client,inline,telegram,telegram-bot,Ios,Client,Inline,Telegram,Telegram Bot,我有一个类似于@pic的内联机器人,它工作正常,当我键入查询词时,我可以看到出现的图片,这样我就可以选择一个并发送到聊天室。问题是当我这样做时,会发送两份相同结果的副本。这仅在iOS客户端上发生。在Android、PC和其他平台上,只发送一张图片。我已经检查了所有日志(bot在Node.js中完成),对于每个请求,我都有一个响应。这似乎是一个iOS客户端错误,尽管@pic bot工作正常。有没有人遇到过这个bug,或者知道是什么导致了它 answerInlineQuery响应对象示例 { "in

我有一个类似于@pic的内联机器人,它工作正常,当我键入查询词时,我可以看到出现的图片,这样我就可以选择一个并发送到聊天室。问题是当我这样做时,会发送两份相同结果的副本。这仅在iOS客户端上发生。在Android、PC和其他平台上,只发送一张图片。我已经检查了所有日志(bot在Node.js中完成),对于每个请求,我都有一个响应。这似乎是一个iOS客户端错误,尽管@pic bot工作正常。有没有人遇到过这个bug,或者知道是什么导致了它

answerInlineQuery响应对象示例

{
"inline_query_id": "817150058382989968",
"results": [
    {
        "type": "photo",
        "id": "se090",
        "photo_url": "http://www.shadowera.com/secardbot361/se090.jpg",
        "thumb_url": "http://www.shadowera.com/secardbot361/se090.jpg",
        "photo_width": 344,
        "photo_height": 480,
        "title": "Tracking Gear",
        "description": "You can view the hands of opposing players.",
        "caption": "king"
    },
    {...
更新: 因此,我在node.js@iosinlinebot中创建了一个最简单的内联bot(您可以尝试),并且您的行为完全相同:只有在iOS设备上,一旦点击结果,您才会向聊天室发送2个图像。 代码如下:

exports.handler = function(event, context) {
        console.log(event);
        const https = require("https");
        let answer = {
            inline_query_id: event.inline_query.id,
            results: [{
                    type: "photo",
                    id: "abcd",
                    photo_url: "https://lh3.googleusercontent.com/jVXglyWWL5J2y1vRN-7Jy3_ozvvZc4w5486IAkbAIrWcNN_vn7YuIvhc1JDtGq43BqGl=s180",
                    thumb_url: "https://lh3.googleusercontent.com/jVXglyWWL5J2y1vRN-7Jy3_ozvvZc4w5486IAkbAIrWcNN_vn7YuIvhc1JDtGq43BqGl=s180",
                    photo_width: 180,
                    photo_height: 180,
                    title: "title",
                    description: "description",
                    caption: "test"
                }],
            cache_time:1 
        };
        let postBody = JSON.stringify(answer);
        let options = {
            hostname: "api.telegram.org",
            port: 443,
            path: "/bot" + process.env.TOKEN + "/answerInlineQuery",
            method: "POST",
            headers: {
                'Content-Type': 'application/json',
                'Content-Length': postBody.length
            }
        };

        let postreq = https.request(options, (res) => {
            res.setEncoding('utf8');
            const body = [];
            res.on('data', (chunk) => body.push(chunk));

            res.on('end', () => {
                let j = body.join('');
                console.log(j);
                //context.done(JSON.parse(j));
            });
        });
        postreq.write(postBody);
        postreq.end();
};
这是一个事件对象(来自电报):

更新:
多亏了塞德里克·海德里萨里,我们才找到了问题所在。这是一个电报iOS客户端错误。如果
InlineQueryResultPhoto
对象包含标题字段,则用户将向聊天室发布两幅图像。

使用
^
$
关闭正则表达式的开头和结尾非常重要
例如,使用此正则表达式的用户可以使用
start
start a
start b
作为Bot命令,并允许他们接收您的照片,但使用
/^[/]start$/
,用户必须输入准确的/start命令

1:使用此模块:
2:并发送您的照片:

bot.onText(/^[/]start$/,(msg)=>{
常量选项={
解析_模式:“降价”,
答复:{
内置键盘:[[{

text:“谢谢你的回复,但我的问题与bot命令无关。我的bot在内联模式下工作。它向电报发送所有常规answerInlineQuery对象(我会将其添加到我的问题中)。问题是,当用户在客户端上选择一个照片结果在聊天室中发布时,会发布两张图像(仅在iOS上).您使用的是哪个库?您可以共享部分代码吗?我可以在1天后检查,因为我在度假。打开一个空项目,然后使用并检查您的
InlineQueryResultPhoto
。我不使用任何库(甚至不使用http),我的代码非常精简,是用vanilla node.js编写的。它发送正确的“answerInlineQuery”通过https将“InlineQueryResultPhoto”结果数组发送到TG API,并从TG接收“ok”。我可能会创建另一个基本的内联bot,只是为了测试是否只有iOS客户端再次出现相同的错误…会让您知道…顺便说一句,您可以尝试我的bot@secardbot,使用一些关键字,如“fore”、“hero”、“item”。注意它是如何在iOS设备上的聊天中发送2张照片的。在iPhone 5S中,我有2条消息,1条(照片+标题)和2条(只有标题),我正在等待你。我创建了一个新的机器人,只是为了测试这个东西,你可以看到我的问题更新。正如你所看到的,它是最简单的内联机器人,但在iOS上仍然会出现同样的错误。
{
  "update_id": 12345678,
  "inline_query": {
    "id": "123456789123456789",
    "from": {
      "id": 123456789,
      "is_bot": false,
      "first_name": "Firstname",
      "username": "username",
      "language_code": "it-IT"
    },
    "query": "test",
    "offset": ""
  }
}