Telegram Bot不会通过投入服务器和使用webhook来工作

时间:2017-08-07 07:59:01

标签: c# webhooks telegram-bot

我从Bot-Father创建了一个bot,并且还在C#的控制台应用程序格式中编写了一个简单的电报机器人。我的机器人代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NetTelegramBotApi;
using NetTelegramBotApi.Requests;
using NetTelegramBotApi.Types;

namespace vinehTest
 {
  class Program
   {
    private static string token = " "; ---> a token from Bot-Father
    private static ReplyKeyboardMarkup mainMenue;
    private static ReplyKeyboardMarkup phoneMenue;

    static void Main(string[] args)
    {
        mainMenue = new ReplyKeyboardMarkup
        {
            Keyboard = new KeyboardButton[][] {new KeyboardButton[] { new KeyboardButton("درباره ی ما"), new KeyboardButton("شماره تلفن ها ") },

                                                                      new KeyboardButton[] { new KeyboardButton("آخرین اخبار") }

                                              }
        };

        phoneMenue = new ReplyKeyboardMarkup
        {
            Keyboard = new KeyboardButton[][] { new KeyboardButton[] { new KeyboardButton("ریاست"), new KeyboardButton("بازاریاب "), new KeyboardButton("طراح") } ,
                                                new KeyboardButton[] { new KeyboardButton("بازگشت به منوی اصلی") }
                                               }
        };

        Task.Run(() => RunBot());
        Console.ReadLine();
    }

    public static async Task RunBot()
    {

        var bot = new TelegramBot(token);
        var me = await bot.MakeRequestAsync(new GetMe());
        Console.WriteLine(me.Username);
        long offset = 0;
        int whileCount = 0;

        while (true)
        {
            Console.WriteLine("While is {0}", whileCount);
            whileCount += 1;
            var updates = await bot.MakeRequestAsync(new GetUpdates() { Offset = offset });
            Console.WriteLine("update count is {0}", updates.Count());
            Console.WriteLine("-----------------------------------------");
            try
            {
                foreach (var update in updates)
                {
                    offset = update.UpdateId + 1;
                    var text = update.Message.Text;
                    if (text == "/start")
                    {
                        var req = new SendMessage(update.Message.Chat.Id, "گزینه مورد نظر را وارد کنید") { ReplyMarkup = mainMenue };
                        await bot.MakeRequestAsync(req);
                        continue;
                    }
                    else if (text != null && text.Contains("درباره ی ما"))
                    {
                        var req = new SendMessage(update.Message.Chat.Id, "این شرکت در حوزه های تبلیغاتی فعال است") { ReplyMarkup = mainMenue };
                        await bot.MakeRequestAsync(req);
                        continue;
                    }
                    else if (text != null && text.Contains("شماره تلفن ها"))
                    {
                        var req = new SendMessage(update.Message.Chat.Id, "یکی ارز گزینه ها را انتخاب کنید") { ReplyMarkup = phoneMenue };
                        await bot.MakeRequestAsync(req);
                        continue;
                    }
                    else if (text != null && text.Contains("ریاست"))
                    { 
                        using(var stream = System.IO.File.Open("C://Users//sahar//Desktop//Pic//1.jpg",System.IO.FileMode.Open))
                        {
                            var req = new SendPhoto(update.Message.Chat.Id, new FileToSend(stream,"1.jpg"));
                            await bot.MakeRequestAsync(req);
                            continue;
                        }
                    }
                    else if (text != null && text.Contains("بازاریاب"))
                    {
                        var req = new SendMessage(update.Message.Chat.Id, "لطفاً کمی صبر کنید") { ReplyMarkup = phoneMenue };
                        await bot.MakeRequestAsync(req);
                        using (var stream = System.IO.File.Open("C://Users//sahar//Desktop//video//2.mp4", System.IO.FileMode.Open))
                        {
                            var req2 = new SendVideo(update.Message.Chat.Id, new FileToSend(stream, "2.mp4"));
                            await bot.MakeRequestAsync(req2);
                            continue;
                        }
                    }
                    else if (text != null && text.Contains("بازگشت به منوی اصلی"))
                    {
                        var req = new SendMessage(update.Message.Chat.Id, "امیدواریم توانسته باشیم شما را یاری کنیم") { ReplyMarkup = mainMenue };
                        await bot.MakeRequestAsync(req);
                        continue;
                    }
                    else
                    {
                        var req = new SendMessage(update.Message.Chat.Id, "دستوری که فرستادید مفهوم نبود") { ReplyMarkup = mainMenue };
                        await bot.MakeRequestAsync(req);
                        continue;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }
}
}

当我在visual studio 2012中运行代码时,My Bot工作正常。但我需要把我的机器人放在真正的服务器上。所以我在我的服务器中放置了来自C#项目的Newtonsoft.json.dll和NetTelegramBotApi.dll以及myBot.exe,并使用webhook将我的机器人的令牌设置为主机地址,结果是:

{"ok":true,"result":true,"description":"Webhook was set"}

但是我的Bot不能工作。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方法找出问题:

检查getWebhookInfo方法,确保您的webhook网址正确无误,并且没有last_error_message字段。

将类似数据发布到您的服务器,here是您可以在curl -d JSON中使用的一些数据,只需将其复制并在您自己的服务器上运行。

BTW,检查您的CDN配置(如果您已在该服务器上申请),临时禁用洪水或任何检查。