public async Task <ApiResponse> Send([FromForm] MessageFormData form) { Hibaza.CCP.Data.Common _cm = new Hibaza.CCP.Data.Common(); var para = JsonConvert.DeserializeObject <dynamic>(form.para); var channel = _channelService.GetById(form.business_id, form.channel_id); #region luu hinh anh den server rieng try { if (form.channel_format == "image-text" || form.channel_format == "image" || form.channel_format == "receipt") { if (para.message != null && para.message.attachment != null && para.message.attachment.payload != null && para.message.attachment.payload.elements != null) { List <payloadFb> elements = JsonConvert.DeserializeObject <List <payloadFb> >(JsonConvert.SerializeObject(para.message.attachment.payload.elements)); for (var i = 0; i < elements.Count; i++) { try { if (!string.IsNullOrWhiteSpace(elements[i].image_url)) { var newImageUrl = await ImagesService.UpsertImageStore(elements[i].image_url, _appSettings.Value); para.message.attachment.payload.elements[i].image_url = newImageUrl; para.message.attachment.payload.elements[i].default_action.url = newImageUrl; } } catch (Exception ex) { } } } #region file attachment // var data = new MessageData { images = new List<MessageFile>() }; var files = Request.Form.Files; var j = 0; if (files.Count > 0) { foreach (var file in files) { if (file.Length > 0) { var fileName = ContentDispositionHeaderValue .Parse(file.ContentDisposition) .FileName.ToString(); fileName = Core.Helpers.CommonHelper.removeSpecialFile(fileName); var fileId = ""; if ((form.thread_id + fileName).Length < 100) { fileId = form.thread_id + "_" + Core.Helpers.CommonHelper.GenerateDigitUniqueNumber() + "_" + fileName; } else { fileId = form.thread_id + "_" + fileName; } // var path = Path.Combine(Directory.GetCurrentDirectory(), @"Documents", "Attachments", fileId); var dir = Path.Combine(Directory.GetCurrentDirectory(), _appSettings.Value.PathToFileDocuments); var fullName = Path.Combine(dir, fileId); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } using (FileStream fs = System.IO.File.Create(fullName)) { file.CopyTo(fs); fs.Flush(); } var bytes = _cm.ConvertToBytes(file); var newUrl = await _cm.HtmlPostBytesAsync <string>(_appSettings.Value.BaseUrls.ApiSaveImage + "api/UploadFile", form.thread_id + "_" + file.FileName, bytes); var elements = JsonConvert.DeserializeObject <List <payloadFb> >(JsonConvert.SerializeObject(para.message.attachment.payload.elements)); para.message.attachment.payload.elements[j].image_url = newUrl; para.message.attachment.payload.elements[j].title = para.message.attachment.payload.elements[j].title == "" ? channel.name : para.message.attachment.payload.elements[j].title; para.message.attachment.payload.elements[j].default_action.url = newUrl; j++; //var bytes = _cm.ConvertToBytes(file); //var newUrl = await _cm.HtmlPostBytesAsync<string>(_appSettings.Value.BaseUrls.ApiSaveImage // + "File_DocumentsView/UploadFile", thread.id + "_" + file.FileName, bytes); //var elements = JsonConvert.DeserializeObject<List<payloadFb>>(JsonConvert.SerializeObject(para.message.attachment.payload.elements)); //para.message.attachment.payload.elements[j].image_url = newUrl; //para.message.attachment.payload.elements[j].default_action.url = newUrl; //para.message.attachment.payload.elements[j].title = para.message.attachment.payload.elements[j].title == "" ? // channel.name : para.message.attachment.payload.elements[j].title; //j++; } } } #endregion } } catch (Exception ex) { throw ex; } #endregion // _logService.Create(new Log { name = "send zalo ", message = "", details = JsonConvert.SerializeObject(para).ToString() }); return(await _zaloService.SendMessage(para, channel, form)); }
public async Task <ApiResponse> SendMessage(dynamic para, Channel channel, MessageFormData form) { var response = new ApiResponse(); try { var recipient_id = form.recipient_id; var type = form.channel_format; if (string.IsNullOrWhiteSpace(recipient_id) || string.IsNullOrWhiteSpace(type) || string.IsNullOrWhiteSpace(form.business_id) || string.IsNullOrWhiteSpace(form.channel_id)) { return(response); } JObject rs = null; var timestamp = Core.Helpers.CommonHelper.DateTimeToUnixTimestamp(DateTime.UtcNow); var zalo = new ZaloMessage(); zalo.oaid = Convert.ToInt64(channel.ext_id); zalo.touid = Convert.ToInt64(recipient_id); zalo.timestamp = timestamp; zalo.@event = type == "text" || type == "message" ? "sendmsg" : "sendimagemsg"; if (type == "text" || type == "message") { rs = await SendText(form.message, recipient_id, channel.ext_id, channel.token, timestamp); if ((string)rs["errorCode"] == "1") { zalo.message = form.message; zalo.msgid = (string)rs["data"]["msgId"]; response.ok = true; try { BackgroundJob.Enqueue <ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel)); //ZaloConversationService conversationService = new ZaloConversationService(_channelService, _threadService, _agentService, _customerService, _messageService, _appSettings, _logService); //conversationService.SaveWebhookMessaging(zalo, recipient_id, true, channel).Wait(); } catch (Exception ex) { //BackgroundJob.Enqueue<ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel)); _logService.Create(new Log { name = "send zalo error 1", message = ex.Message + JsonConvert.SerializeObject(ex.StackTrace).ToString(), details = JsonConvert.SerializeObject(zalo).ToString() }); throw ex; } } } else { List <payloadFb> elements = JsonConvert.DeserializeObject <List <payloadFb> >(JsonConvert.SerializeObject(para.message.attachment.payload.elements)); for (var i = 0; i < elements.Count; i++) { var imageByte = await Core.Helpers.WebHelper.HttpGetAsyncByte(elements[i].image_url); rs = await SendImage(imageByte, elements[i].title, recipient_id, channel.ext_id, channel.token, timestamp); if ((string)rs["errorCode"] == "1") { response.ok = true; zalo.message = elements[i].title; zalo.href = elements[i].image_url; zalo.msgid = (string)rs["data"]["msgId"]; try { BackgroundJob.Enqueue <ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel)); } catch (Exception ex) { //BackgroundJob.Enqueue<ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel)); _logService.Create(new Log { name = "send zalo error 2", message = ex.Message + JsonConvert.SerializeObject(ex.StackTrace).ToString(), details = JsonConvert.SerializeObject(zalo).ToString() }); throw ex; } } } } } catch { } return(response); }