public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { try { var channelSecret = System.Configuration.ConfigurationManager.AppSettings["ChannelSecret"]; var events = await req.GetWebhookEventsAsync(channelSecret); var connectionString = System.Configuration.ConfigurationManager.AppSettings["AzureWebJobsStorage"]; var eventSourceState = await TableStorage <EventSourceState> .CreateAsync(connectionString, "eventsourcestate"); var blobStorage = await BlobStorage.CreateAsync(connectionString, "linebotcontainer"); //var app = new LineBotApp(lineMessagingClient, eventSourceState, blobStorage, log); //Samples app //var app = new DateTimePickerSampleApp(lineMessagingClient, log); //var app = new ImagemapSampleApp(lineMessagingClient, blobStorage, log); //var app = new ImageCarouselSampleApp(lineMessagingClient, blobStorage, log); //var app = new RichMenuSampleApp(lineMessagingClient, log); //var eventSourceLocation = await TableStorage<EventSourceLocation>.CreateAsync(connectionString, "eventsourcelocation"); //var app = new PostbackMessageSampleApp(lineMessagingClient, eventSourceLocation, log); //var app = new ButtonsTemplateSampleApp(lineMessagingClient, blobStorage, log); var app = new CarouselTemplateSampleApp(lineMessagingClient, blobStorage, log); await app.RunAsync(events); } catch (InvalidSignatureException e) { return(req.CreateResponse(HttpStatusCode.Forbidden, new { Message = e.Message })); } catch (LineResponseException e) { log.Error(e.ToString()); var debugUserId = System.Configuration.ConfigurationManager.AppSettings["DebugUser"]; if (debugUserId != null) { await lineMessagingClient.PushMessageAsync(debugUserId, $"{e.StatusCode}({(int)e.StatusCode}), {e.ResponseMessage.ToString()}"); } } catch (Exception e) { log.Error(e.ToString()); var debugUserId = System.Configuration.ConfigurationManager.AppSettings["DebugUser"]; if (debugUserId != null) { await lineMessagingClient.PushMessageAsync(debugUserId, e.Message); } } return(req.CreateResponse(HttpStatusCode.OK)); }
public static async Task <WebhookApplication> SwitchAppsAsync(IEnumerable <WebhookEvent> events, LineMessagingClient line, TableStorage <BotStatus> botStatus, BlobStorage blobStorage, TraceWriter log) { var ev = events.First(); var status = await botStatus.FindAsync(ev.Source.Type.ToString(), ev.Source.Id); if (status == null) { status = new BotStatus() { SourceType = ev.Source.Type.ToString(), SourceId = ev.Source.Id, CurrentApp = "@" }; } var message = (ev as MessageEvent)?.Message as TextEventMessage; var text = message?.Text; if (text == null || !text.StartsWith("@")) { text = status.CurrentApp; } text = text.Trim().ToLower(); WebhookApplication app = null; if (text != "@richmenu") { try { await line.UnLinkRichMenuFromUserAsync(ev.Source.Id); } catch (LineResponseException e) { if (e.StatusCode != HttpStatusCode.NotFound) { throw; } } } switch (text) { case "@": app = new LineBotApp(line, botStatus, blobStorage, log); break; case "@buttons": app = new ButtonsTemplateSampleApp(line, blobStorage, log); break; case "@carousel": app = new CarouselTemplateSampleApp(line, blobStorage, log); break; case "@postback": app = new PostbackMessageSampleApp(line, botStatus, log); break; case "@imagemap": app = new ImagemapSampleApp(line, blobStorage, log); break; case "@imagecarousel": app = new ImageCarouselSampleApp(line, blobStorage, log); break; case "@datetime": app = new DateTimePickerSampleApp(line, log); break; case "@richmenu": app = new RichMenuSampleApp(line, log); break; default: text = "@"; app = new LineBotApp(line, botStatus, blobStorage, log); break; } status.CurrentApp = text; await botStatus.UpdateAsync(status); return(app); }