/*
. Install the library WhatabotAPIClient from: https://github.com/WhatabotAPI/WhatabotAPIClient/releases/tag/1.0
Steps:
1 - Download the soruce code (.zip)
2 - Follow the instructions to install the .zip library: https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries#importing-a-zip-library
. Install the WiFiManager Library, present in the Arduino Library Manager.
Steps:
1 - Follow the instructions: https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries#using-the-library-manager
2 - Search for WiFiManager from tzapu
3 - Install it
Note that the first time you execute this, the library WiFiManager will generate a wifi network called "WhatabotAPI"
. You have to connect to it with your mobile or pc (Password: whatabotapi)
. With the web browser, enter to 192.168.4.1
. Press the button "Configure WiFi"
. Follow the steps to connect the arduino to your router
*/
#include <WhatabotAPIClient.h>
#include <WiFiManager.h>
#define WHATABOT_API_KEY "YOUR_API_KEY"
#define WHATABOT_CHAT_ID "YOUR_PHONE_NUMBER"
#define WHATABOT_PLATFORM "whatsapp"
WiFiManager wifiManager;
WhatabotAPIClient whatabotClient(WHATABOT_API_KEY, WHATABOT_CHAT_ID, WHATABOT_PLATFORM);
//You must connect to the generated network, and from there.
//you can set the SSID and password for your Wi-Fi network to which the ESP8266 will connect.
//If you dont want to use WiFiManager you can still connect to WiFi using other logic.
#define AP_SSID "WhatabotAPI"
#define AP_PASS "whatabotapi"
void setup() {
Serial.begin(115200);
wifiManager.autoConnect(AP_SSID, AP_PASS);
whatabotClient.begin();
whatabotClient.onMessageReceived(onMessageReceived);
whatabotClient.onServerResponseReceived(onServerResponseReceived);
}
void loop() {
whatabotClient.loop();
}
void onServerResponseReceived(String message) {
Serial.println(message);
}
void onMessageReceived(String message) {
Serial.println(message);
whatabotClient.sendMessageWS("Pong: " + message);
}
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const fetch = require('node-fetch');
admin.initializeApp();
exports.sendWpOnOrderCreated = functions.firestore.document('/orders/{userId}/userOrders/{orderId}')
.onCreate((snap, context) => {
let url = "https://api.whatabot.io/Whatsapp/RequestSendMessage";
let apiKey = "YOUR_API_KEY";
let message = "Order created";
let phone = "YOUR_PHONE_NUMBER";
let requestBody = new URLSearchParams();
requestBody.append('ApiKey', apiKey);
requestBody.append('Text', message);
requestBody.append('Phone', phone);
fetch(url, {
method: 'POST',
body: requestBody
})
.then(response => {
functions.logger.log('Whatsapp sent', response.status, response.statusText);
})
.catch(err => functions.logger.log('Error:', err));
});
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const fetch = require('node-fetch');
admin.initializeApp();
exports.sendWpOnOrderCreated = functions.firestore.document('/orders/{userId}/userOrders/{orderId}')
.onCreate((snap, context) => {
let url = "https://api.whatabot.io/Whatsapp/SendImage";
let apiKey = "YOUR_API_KEY";
let phone = "YOUR_PHONE_NUMBER";
let imageBase64 = "iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH6AIGDxAZTJ3CXwAAMDlJREFUeNrtnXmQHNdxp7+sqp4bg3uAAUBgcJAgSIIgQRC8CRKUTVG8AFEET92yZFMrWQ7L3rXWIa+1XjvCqwhz7QiF7V1JtkSJsg6LskzSpomTpwECPAASAA9cBDDADM7BTPfMdFfl/lHdPVXVdfVMDw6JGTFAV1XWq/fy/SpfZr58r4RfYbr797Olnw0IrQhjgGkqdCC0A20qtOMez0BoAeoQ6lWwAEEAQVUoAAMIgwi9iu5H2IPQidCl0Ikhe4CDCKdAejCkH1We/q+NZ1oUo0ZypitQS1rxu9lSq+oQ2lSYA8xEuBhhLkOAmYzQCGRUMJAyUABQz29EA8fun7rHiuAg5FXIIXSDCyiE91R4E9iHyC6FLhUdBHjmq81nWlQ1o3MeQHd/KQtgiNAKnIdwJcJi4EIM5iiML2oWq9zxAUAEz2npmuE5DjsHfkD5zxWKmuo4wi6EHcAWhE0qvI/QAzj//nvnNpjOSQCt+mIWQPIwFmE2wtUq3AJchjAFoQkwfMAIapewY985LUsoUgOFgTCax1HIIhxGeA1hNcLLwG4VTgL6zO+ee2A6pwD00UeyoNQhzFbhGuBGhKVFEDVpqUX+YWaYAKIMolhwhA574c8P8GQRditsRNiA8BLCbpTBZ7587gDprAfQyt/O0gqcglaEhcDtCMsR5qswliFDl0QAhfBAJYh8PFQx7FUMc5pGSylwEmEnwhqFJzHYikkPNvzHF89uMJ21AFr5eXeYEpiEcDXCSoTlwHQES6HcUT6whJ2rAlCVWkvjARahgWI1WxiPe66gwgGENcDPEV62lSMCuvosBdJZB6B7Ptfn+jaGTEK4GViBcJMKU/Fqm7C32fM7NWACx+EaSIdhS4n/vqR78LVLgUMI6xCeUFiLcATQZ3/77ALSWQOgez6bZefhRi6cmhursAzhYdz/JyFFg7hUY0lpc4BPIw0PQCEaKMy2SngOMBxN5qgLnPUIjyGsz+fzJzOZDM9+4ewA0lkBoI99JgfQhOjlwKdVuB1hCiChrvRIPaOY40SQARgJdlL5Hh0pgLwa6TDCkwjfRXgVyD77W2ceRGcUQB/7dBZ18ohZNwt4CNGHgflljZNG3UMkgNLw1GwoDNNKwhCISLCL0tlJDsJOFR4DfuA0yF5jQFn9uTMHpDMCoDu/cJzmbDMFs9AsIjcq+gjCTbgBv+g3FaiJRvJ2lqfMcMBp1aCMHE4TNFDisDd03IuwDvgWsAGLPrKw+pHTD6TTDqB7P5lF1BEVYw4in1FX68yskaqPBdXwtFqNABSpoRg+yGBf0Tb6jgi7VNHVnzm9IDqtALr3EzmAekRvAL6CsFzdOamRvZnVgszDmwyy4QCo6IHF3DMsgz68nTkV1iA8CjwHDKz59OkD0WkB0H0f78emgIE5XkUfAPkSwnwECQo6lfpnGF4Pw9NSkTxJdRYAjQdDGq2UbihUhJ3A3yA8DhwHWPOp0QfSqANo1cM5HEsxCsxWka/guucTKBqYqTojXGixgg/tDG+LIyZKKzwuSanJvL+9WstrXyW0s6KcwP2x59yyjiE8psKjx8aze/ZeeOJLowuiUQXQqodyoJgYXAH8oQp3gNaX1HwYgNK/3dGCr82wp8l2U9JQWS0I02i65HYNAP+qwl8CmwF77SdGD0TGyIsIp1UP5cBNobgN+CvQFUPgKXaQlyTidxRVy1MVv0byi6S5v8rnjqCdWnm9XmEF8FcIt4mBdfP3+0ZYiWgaFQDd92AOUepRVgDfBK5FxBSCr28xk0uowFMVMnR5wpg0xY2RT5RioeI/1so2hLYpEoEp2hTHEzgpGspjAtcC33RghQr1Nz02OiCq6RD2sfv6MQwHlEYMWQV8DeGC0pPCVXtEtBb8qj14nIbHc1yTYS6iHeHHKefBYtpVo2HubeDP1dAfo+QQZd2DY2rW51bNSgJMQwEaEPk48DWFWd7rlYpG/T+9yigG2ml4CLueNMSM9HoYaQKPhPAnjQvBMuPbeQHwpyD1CN8D6aeGVLMh7L77s6DahMonQL+O6iy3pVrUs4qWjot/GiKEoEbWwPXyOQ3hiSFNc6Gis7XyTzT8fAVPZb0jKY2tNgIbUYVZwNeBTyA03fR47YazmgDovvtyoFKPci/oHwHTYwUQZfdUo1HSCDEJWQFTRVN0XiJYR8OQDntwGs3np+nAHwH3OlC/rEYgGjGA7luVRRQL9E7ga0BHcgM9wcNRIJ/WkgQez7ECqqCqOKo4ivvnUP6tWqm0UtfHS4F6aYphrqpnhZfXAXxNhDsxsJb9qHeYEo5sRnW0alUOwBD0I4h8E2F+udQ0Rqu4A1tcIC8YcS4LO+Y4raGruKBAQAywLDDNoT8RhgKOgK3uX8FRCg7YKkMOmjHktA0ZtlqlLGLqnKbtSUb/0LWdin4V0acAZ/19wzeqhw2g+1flSibDUuCvVPRat0SJ9g5853RYcz/DmbJQ770UwZKBsc3CxLFCawuMHyNMbBXGNAtN9UJdBqwSiIrgyRegP6/0DsCxXoejvXAyqxzvU472Krm8UigBMrLdKQOEtQBUEEACru0pILwI/B7oRhDW3ze8YOOwAHT/vTnAAWQ28L8RVqhgjoILmswTI9jSsIRAJgOtLcLUicL55xnMmCy0TzKYNFZoqIeGDNRZgmkmt99RKNgwkFf689CTUzqPK4dOKu8cdtjd7XC0T8kOKjbFdyrYpgRQpcpTSgJdvNa3gScQ/gDYDbB+VUvVWBi+G6/GOISvALcDFWIPs5Hd+yi/CWXGkVDI/Yprt2QyMH6sMGe6wfwOg4s6DKZOFFoaxaddqiVDoM5yATemESa3CnOnuMDKDSrH+pT3DjtsO+Cw45DDweNKX15Rde+N8h8SbX5J5knsB6XUcBO4HfQAyJ+AnqiR+OPp/nvKKRmfBb6BMPH0z3Ljf8MCq0Xr62FWu8Gl5xtcMs9k9jShtVmGDZjh0mABDp5w2NHpsGWfw/ZOmyN9iq1UBLlPW7DUa3e69x9V4evAt4GBDfdWp4WqEun992TpeP2X7Lnsrg8Bf42woFRK9VFUHZmQPMa1U/zZ2AjnzzS4ZpHJwvNN2sa7tsyZJsUd5t7tcnhpl83G3TZdve7wZlQzvCeBjIg0l+TUl+0q+mWOmM8yyWbDx9KDKDWAHrgnW2TXueqC5yMVdoi38d7GJSWhRwglFmBFoThAQz3MnWmwbInJ4gUmE1oFY9SmiUdG/Xl4p8tm7U6bjXtdICmuYZ9Kg0fIKlZDVxjRVL6QwlMIX0Z5D4EN96QDURU2kAA0gXwWd71WOEtwjJeh/9THqqnifMEpC6FoIKsr9FlThRuWWFx7mUn7pNM/TFVLDRlYON1kziSTpbNtntle4NX9Nr2DnmEtpO0jspskcCKcbgY+i/BnQJaUlErcD9ybgzogx20If6veHOY07mQoT2AIMxLKYei8AzQ1CpctMLh9mcW8mcZZMVQNh470KhvetXnqrQL7TjhDNm41w1o1Qx+xsbV9iP72+Mbmp3tyA6z9aENi/dNpoAJQYBbCIygzgzkEqSKtxB+jgTcleOy557ypwm9eb3H9YpNxrWe5ykmgSS3CXQst5k8x+NnreTa9b5PLVyqKxDnBCA+tzFMGSmzfzQR55Fiu7y1gb5r6J0r/gZU5gEbcJPivIbQMjasajnqqjJim8CAUN1J8yQUGd38ow0XzDDI1zSU489R1Snl6e4GndxQ4klXfkFZVJqRXbpE8GsEjvYj+OfAokNuwMt4WigVQETwA1wN/j7AgsgLBSnuOwwRQDYAUaGyA6660uGu5xYyp57bWiaNsHp7fVeCfXi2w76RThUkQEyqBgIkQsmLEf8924PNi6/NqCc+tiAZR8jusjEX4FLjzXEOGW3Qnlgxd3wnxF1phAIbkzQhucK51jHDrMpPbbrTO+SEriZoycMv5FhOahB9syfPmYccNUwSbnSQGieMNudkv//kIn1JLtoKejHtMpLP74N05TBuAZSi3l3iHOj3a/h/WDHVYmxQmjBNW/IareX7VwVMi04DFM0w+d1UdV8wwMQ2qD0HHUkhhftEaoLeDLsMwuOEX0akf0dESAcegDXgYd6ODwPMTOjO2wVJ5e0ADOQrjxgkrftPi1htNmpt+PcBTIkPgoikGv3VVhqXnmf64VngetF+mSfIPUsUIIFNAHkadtrjCQgH04N05HBMUbgKWATJUuD8rL5hlGJa5F84TqL9nTFOFcWNczfOh60waG369wFMiEZgz0eBTSzIsnmYOeWYhHlcwS7OSJ7wf1Ntf6uMR0GXATRY210dooUgNZBSYLO7ykLZAs3z/xUugygvFAGFLM9x2s8Ut15s01P96gsdLcyYYfHxxhovajEhdIIknxasFwm+QilvagBV5zMlRWqgCQA/eXfa8rsbVQCEPkMo/kfDzeJe5BPRsMMKsUFcHy662uHWZSdOvqeYJkggsaDN46LIMM8cabhQ+lNHzO2qYS9lnnr66CeFq27G5/l8qMxijNFArsFKV9tgKpaTKFFMduiBDPw0DliwyueNDFq0tH4DHS4bAFdNN7rvUYmKzu2dwLEmV5yPLkXZBVlqm2SohN4cDSFkILA97sHr+rdq1pJhUHME/Z6bBXb9h0TbxA/CEkWnAjbNNPny+RaPl92UqbKAQSsUTbl8vV2Fh2K0+AD14Vw6UOtwksekhBQWOKpe5aKxBTbgBqDC+Vbj9Fou5s87SafSzhJoywm0XWCyeXjSq04wMXgcozTIl7zlVEJ0O3I5o3fW/9A9jYb01G1f7xAQZgxMyCRTDo+pmDl5/lcmSRcZZm4ZxNlH7GOGeizJMbw0Y1RUB2yJ5bYiqhzDAxcJykNnBAsogefDOrDvZVChcA57VFQklV0SPJQlTlVfnzTa4+TqLpsbRHbps202KH8j7R9KUQoxtkSFuqkZ9RtzA3yjTxW0Gt51v8oOtDtl8NXcOV8Y6H9FrTIyd1/1rLy/c4U5vWL6C84VxCDcC48Kel1ZjRtfXbzsp0NwkLLvGZEZ77cFjO9DTp+zpdNjdqRztUY6fUk7ltLycxxcTDc4rRVwLu88woLURJrQYTBwjzGkTZk82GNMwOoDKmHDzbIutXQ4v77dTyr8odM9SpUi+ShoH3Gjj/EKKG1hBEUAP3ll23TuAK30PC40XBGCUNKJFh324dIHBlZeZNR26bBsOHlE277B5ZYfNvi6lN6fYjptLlDzZq8PKMEBADBvTgDGNQsdkg6VzTZZ0mEwbW3sgTW0Rbp1n8s4xhyM5jfbiffNiESrA29cB79hDV+Lud3D8+id7ef72Fp+dYwDXAHNCHxx3LonKWVKemTSFtknCzdebjK3hHNfJXuWlN2zWbrHZddBhII8v5OFbYlNsj5bOlY8FCfnOhTeM4j+WIdCpq/mO9ynHsjZvddo8/47Bb1xkce1ck9YaD9OXTzVZMs3hmV2F4UdaEr3pct/NQbjGEeMNUXXAbyi3AregNMUmJ6FlhKa2n72xn+JPw4BFl5jMn1e71/JAt8Mv1tm88IbNqaz6VotGGpgVs9ZVdINE31N6bn8etu532Hcsz65uh5WLM7SPrR2IWuuF5bNNNnfadJdyiILtStO2WBCVTY8mhVtEnceBE+D3wmYCi0IL85U59ApHbxgVTPTxH6vCpInC1VfUbpJ0b6fDP/6ywOpNBXqzimGQLj+6ItE4JiqbLnJbUZwhcDKnPLmtwLefH+T94w61pIsmmVzR7p8r841UFZHckL+kjbOG+nwRyMxSUNF48I4BEBtgCTA1bogKBhGjtVRAlj4bydUMC843mNtRG+3T2a38078XeOUtG9v2ACdFtHZkTkFI6yOuGwIFB17cZfPDjQUOn6pdfkZzHVw302B8g5S9Sw2VfxUaKKp96FREl9TZcNVTpzDAAcesAxYDTaHlRRwkydLH42FubhKuWGTSUoO9H7P9yr+9WGDTmzaOQyRwI+UWwiNJJ5LCKRHDgeCC6Pn3Cjz9ZoFcvnYgunCiyYWThuJC4fXzu9SJ7QyXTxOweMDSOgspr2trAxaQkB+U2B9pOk/hvOnCBXNHrn1U4bWdDs9tsRkshDQ2zIscTiAtRT+HZWmGmlwC/QV4dkeBNw7Ubiib0Cgsnmq6UxwpcakpZKEV7pwYuFhpAzCKAes5uBHogED8x+r7FTJtoZUh8SCPacIlCwzG1cCQPNGrrNtkc7xHMcKGozQCCmmlppieicyDSpAhuMNZ9ynlP3YUOJmrjRYyBC6abDClxf20jwZenmDfUVWbgjzMpuitG8XdWGbiDR6GkPj+SWFghhhljsLYscKF80ysGqyoeOs9h+27nBHZMeI7Hqbx7LtOao31xkGH7Ydqp4VmtgoXTDCih+XIbUIinKKKPi1r+XGIuzbQQGlQuBjXjY8UtD8XOgKd4tc+FTwK500zmDFt5NonN6C8vtOmN+sPoAWiBYk0pKKT377IP5/mLcs6lgTXM9vyvs1AYcTiAKC5Trh4sklD5BY1AU2SoGkreIba1YqLmQYDaBWYS2CLlmgX2IPYVG5tyXUXTAs6ZgpjapDr03VUeXefVubFDMfGCbQrvcsejE7GyC+kXo4DO7scuntrp4UunGgwvlEiAByibSRaA0UmArpYmQu0GgpjtCJtNc2EaAhCNf4tbWoUZs8yqKsbuaA6jyhHT/oX3/nkFCI7n7KJbFlIWzT+Ta3Ic4p6RMDJUIHDp5QDJ2vnjU1pFmaMqXRQgiNIpF0Xm8vuozZgjAFMEzyZhxFSqPQvQsbRmLdWEca2ClPaahM4PHJcyfWnF7zjuH9a7Gvfppm+Y1dbKu4HS53ib99x6Vzxt8vjLydJnqWQUTbvro+vFTXXCfPGF93rUEoRPAzdn6+C2hGmWbgTqJPLZQef5Wt7fJQhugxXWm2TDSZNGDmAbAf6ipOjSaS4mXxTJwizpxmMbXE9h9DZ9kAbKjYlCOP3/O+ocjzr7gPUfUqJrV7xvoKt9A26u5fVYmcRy4AZrQZ1JvQ73jI9809hbU6oZwhNBjosgXal+NG3sBsqgoglNVdFJXAbMmmi1GTqQtXd8NKbXB7lMjfVw3WLTJYvtjivTajPpAloDbNeuPlGe48oz7xZ4Pl3C/QXPKEkCb/HdqITH6olAdqbhdZ6IZcNG+I1+kYvS3JMrxFot3DHsvSbo4gMq7WWCZMnSk3c90QBFKm+Dm69yuKemyxam0cJNQFqyAjjZgozJ2ZoboB/21ZgwI4HUa1pQqMwvkE4lPWCpRQOl3JQ2AelEM00xBMAnXs9A7QZ6to/o5JD5zXc6utgalstN4BKLmhBh8GHrzp94PHS+GbhjkUW86eaFZuTjzY11wnjKpZExRj5EUFY9R5UXjeAdkNcGyg5Bh9HEn9aEerq3CBi7Sg42ea5oq72uWK+yZQa2FzDpenjDJZ0GNSf5m1oGkwYXx+0PuLlkObFDtFDHZbCjCBXUNVq7K+oGvl56uqE5qakm2pDqtDUIMxoO7N7JZoGzBhv0FAn9Oc0xjOqLWVM1wYyS3tTKkRmIpaFRrLiCNhJKswwBJojmUqnQgzr2GdJZVGZjFBXV0MJJhRlmW6CexjFuto1powF5ujZ7aFkirv8pzw/ODJvq3g9oBHcNjVbQEOFQRURiPNeSDWT6/ldV8fp2VHMYysGqServLnbYe9hxUGZNcXg4g6DcSlsJNuBg8eU3d0O/XloaxXmThHGJKSoBsQWWtdakyHQYAUN2xQPi2XRsBU3DRZQV7V3kEbd+XiUuky6zwiMiGLqdOiY8rP1BV7YViA76FavqQGuWmCyalmGaTGrYQfysOGtAr98pcCB40pBleYG4cq5Jh9dajFr0jDGyVFUSYZAvVUMJqZN7UjRpyGGdp1Bil3KtPyE6MYnpVKYprhT/7WiKoaggUFYvbnAmlcLnMoNfb7pVA7Wv2Hz1MYC/YPR97+22+bx5/O80+mQG1Tytps0v3pbgZ9tLNBTbUpGisnWkZIlQ/nRkdMqSbGe5O6yDAVJpWJLEeVqZqi9S5qhYofQEVEVWDxyUnn1HYd+z17Mgvs7X4BX37PpPhkeN+7rV15+2+bQCX+eteAOa5t32+zpTm7X6XTjo2sQmOOKmbsMnQerzDGS2AzECsMortMSJjRtW9Ha5pKnDsn39qu7SsMrS08Zvf3uYsPwe2H/MXXTZYOPF+gbgEMnR9CwsMngGpCtkjgq1CJcU9vd90Jdf/fkYJ5Uc1dVkXrc1BhqqheavSkOEnI9Yi+ijAXN9eFGeWmerTGtd3maXDFHYcDWcE8zRA9EsPl+RPCogbuNeEpKyIvxzO4Gv50+mId8VWu4U1YHKjYoBxesJcBOGguXzDaos4ruexF4qi4AFnYYtI0LV8atjcIlM00aMkMz80M5TjBjgruEOYpsTWeg1pIchVw+GKoImYEvrqj05f3IUPaEdzY+ovoFQ8BvPiZPolXUqcwaaUsJg4PKwEDthVUxAhRl0D8AR3tcCTbWC7deaXHtJSaNdUNvU0MdXL3A5I6rLBojcpQsE264yOTaC03qLdcAL01+Tp9gsHJJhvZx0YI60aduwn+w3qNoFNkKfXlXA5VsPZ/Awn4HZegTcMg4WxxYLIV+SsHExLckdGrNfy5inM3nhWyulq+iRNYFIDugbN/jsPQig+YGYfpk4RO3ZrhkjsHeww6OQscUg8vPN5maMN0xZazw8I0ZOtoMtr1v0zcI0ycI1803uWyWGbnmvSenbD3okM1rxRCYJo42XMrbSs+g+10yQ0oasIpZhAoeieLpt4A+YGJkQdXPkYSeGxiEkz21fO1iyhJXU2zeYXPpPINrL3E3b5gyXvjwlRYDeUURGjLpc3Daxwsrl1rcstAkb0NLPZF2E7haauMemy177Zrl+qSlARtODBSH6RTueRofMoKnzwL2467KCCW/MxYuhbA9gbz3CTAwqBzqql3iVIUEPGWWhtMjJ5V/Wl3AUbj8AoOWBjcboGGYUyqWCRMS8rlV4VS/snG3zeObChzri1hyNIrUm1dOFLM1hRKIEtqcEIWO4N1vIezB3ZVDQlhDHjScYUixbeg+qhQK7o5kIyGBoYlJrx0f0ty9hx2+82SeRW8bXNxhMnmcu7FDapc2rNzQt1qwHeVwj7J1v8Nr79scy4aG/0Nftlq+U8dyyvF+DSkzpu9CL8WiQYE9FtCJ4OBdlZE0UxqXvRbxaFU4ckzpy+qIFxUaBjTUuzPtTlRowBMwPNqjrNli89JbDo31xehX+YMjQsV+QJ77y1HjwPmw/YNsXO8nO+harxIBVK92Ng03Ca1WWlmBzl7XBqo0ntOPIH5+9Wiy8ikHodMCuoA8XgBVgCLe3khLh7scuo+OHEAiMKFVqK8T8jlNFH7pem5AyQ7gB4U4fu/W06aqP6Ln94QjZOmXZr0ljKvhnkEFG/b1OAzarjOe2mBOMw/maYu6mOkygE4gF3tjmgp4qWKexT3oOQVdR2pjDUyZKLSm3Jyh9DKVtloxxNViQ/8LprhzdeU/o/gXPDaieIY+6V358Gi5jW8SptVwg63evPLuCcUJLpAfqdgrvficQKcB7AG6o5iHwkjRf5JwHdzOy+aU3fscBmsQUJw6SZgxJdx/Dp2yiGJUibg5gtKUGeSXaNaO8cLUGgKoK6scOFXapiRMLcb8SXT/hVS+G9hjAAdxtVCEvIqh25gFhKFLYis2WoBCAXbvc+ipwd44Y8cIl8wL+VaqVBq7sU8r88RMDCct2Y72UmLDIA0ZWDTdZEwNvwey86gTMKBj+iqiLZELCv0ORafCQQPhFK4dFC3h8qd/PUhNWhIrlQgWgf0HlYOHRg4gQ2DRBQbT24yhTJOImEcwUu2jcmp1FW+lpHxLo6pUBPmsCQaXzTBqZkD35eHNIw4Dnk1bI5crp/62SaWsiu3qAk4ZKD3Aewh2eLcmvXkRGsh3z5DgTpxUtr9jU4jZmTYtzWgzuO4yk/o6T7pSSCM0eBASzk+ztUn8XziFXXEUGjNw0zyLaa21S9p+v8dh5zGnvIWxq42TtEtSf1bKCne25D2gx8CgH3gT6AmvVspxNHJ7F39Rtg1btzscPzFyLWRZcMPlJgvnmRUeVCT5I6Oee1LYCFFaJ0KrRV0SgSXnmdw416zZ1r+OwrZum8N9TkCjVWkHVfAHKw9Aj8CbAv2lPdH2Udx1M7zlKREcaitUVuD9g8rOd2uT2zFlgnDnjRYd7VJe555E4XZJ9VonMkAY53kpnD/ZYMWiDG1jamf7HM0pmw+5u9Z7IwixfRTWn8GRRkLbdUKVfapgFMG2C9gd7YIOaZTYTYiieEoFFe2RvqyyeatNb/SnOFOTCFwy1+DeWzJMnRi+rUnwRQq3S6JtvNK56O1PhtoW9xBH4bzxBg8tyXDx1NquN9px1GHHUSdkdI7RMJpiix4NTVjdLcIuEXeDKVC6gO2AE/n2RBiowey+cPJ3qyrseMfh3T210UKWCVcvNHnowxk62sX/1oTVrVYTU5KusFI+0PwpBp+5OsNVHbUbusBN3Xhxv82JgYigatRoG+Wh+1CoQT4HFytdAJaDRV1DbjA/kNmCkEVpSQp+RVWudKxxdxTf1KPHlY2v2lwwR2rykRXLhGsvNRnfKjz5YoHX3rHdqHOpjt4oasjjgtHYxAwDSYZOKXrb0iAs6TC469IMC6YaNf/kwVtHHDYfKs76e8pW74+IkEaaTIpAQlwW2ELBGSRjYm7b+T+5+PyvI2Aj3A5MCLUVw35HnfMdl4aAoWsirjrv7VNmzTBpr9GeQYYBbeOFizoM2iYIA3k3ZzlfKO794xFOmA+lXh5NsoBK/BJ6TQTGNAgLp5vcc4XF3ZdmmDXRqPnq1FODyk925Hmjy6mQv6Tts9jrEuTZBzyKIYdfuNX7rQxhn8DrCvNKp4aQGBMoC7jFoYgOM+bF3aZu9fMF5szM1Ox7GSIwcazwm0stli4w2b7XYfteh/c6HU70KgMFKDjqd3VDBBqcG9OIF0WLQjbE9QrrMsKEZmHeFIOLpxksaDcY1ySjtqx5S6fDxgMOwS2yfX3hTX+MiowHh/jo+r6O63QBnjVhAj0OrEa4Dc+G46EP8j5Awi/H3V8KpKnC1h0Om95wWH5tbb/YY4g74XrdQpOlC0yO9yo9fUr/IAzkPQCKEmLxOHrILrZUhp5XnxEa69w86glNgjXKCykP9SrP7CpwNHZCWcv9FTlp6unTSB6XsiirMaWnlHBtFR+BusbRS8Au4BJfBSKFGHEcX4khFoFTWWXNiwXOny3Mmj46OyFkLGgbJ7SNGyU1cAZo0IHVuwu8ejgiIus18IfT7PB7dgEvYWs52GQAPP5EY0kt7wU2VZY0jL9g9n9MPd/d4/Ds8za9fbVyj371aethm6feLZDLE659yqpkhH3nR9ImhD0IvPBhNxUiYLPLcdANBIOK3jqloQQN5fP8xc1heeUNm70HPgBQGjrUq/xiR4HO3iS3vQp5BgNIldH6E8AGVT3hvVYG0OM/byreJS8h7PTfHRahTJhHqbgeU2mFlmah5TTtH3QuUzavPPVugU2ddoosgxISIvorZn7Tfw2AncBLgvDCbS3lx1TuACLsBtbgXXCYaBmnoAitpOpu/bJ0kcG0Gkdnf9XIdmD9Xpun3hnavDOZqgjqRbMWcDGxO3jB12OP/3Mjig4CTwIHfCWPhv1ZdBBmtBtcsdA8PfsHnaPkKGzptPnxtnw5Wd9HoWZCzFsfb5oOlePyHACeRBn0ah8I3VxTAN2qLuJ855MzD4PzR8kVzFiwZKHJedM+0D5RpMD2bofHXs+z92S43RMqat/3L6vtP1+ha1C2hj2istdEGcg09iD8HPFkKiYNYaFRrJAgUSAIOW2KwVWXGx9onxh654jDP76aZ1tXwtxh0nyfpOAJFqZ0Aj/HDk/3qQDQj37WRF2hH+BlYN1QeSGJY3GGtYSnPHhPZDKw9DKDGe0faJ8wUoW3jzh899U8rx5y4z1R5mh4wDPEwdGURvQQrUN5GQNe+EhLxXNDe05QCpbRDfoEaNeIAlIR5Diu7XPV5R/YPmGk6g5b//eVQTbtD/mcp5e3irOp+rAIPnVn3J8wCnZ3VKg7FECP/6wJy7YB1oGsL83pV20DET5Yq0JdBq5YaDDjA8+rgmwHNh+w+buNg7x60KmwBiTwIyzsk6avRL0zriW7tdxvKrBeYJ1aJi98JHwNVXzvqXYh+hjo4UD9QloTWkDkqWlTDZYsMmvy6adfJcrlYe2uAn+7Mc+bh1N8jVHCf0d6Yd551XhtdBh4zLGMLo3J+o8E0I9+2lRaRL4e5Emo/PhMRbEVE5QSmlZrmnD5JQazZnygfbx0pE/5ydY8/29Tnl3HXHGH7owWZwgH5J9q3rKSHFy3fb2RdyK1DyTt0Cpgi33SUOMfgGtxv9brT06qMlEL3G9mXLPYrFzTVSXFZx2cO5S3YWe3wz9vy/Of7zvkChq+AURYw0NlHp1+E3WPL/NA2YnwD6Ankwap2Ks/+nEjppoIslmQ74P0lhsQV5ngRQ+/acIVl5qcN4KZd9uBA13K2k02W9+tzUrXM0Vdvcq/vJnn/zw3yHO7bQYKCZ9EiHpJfSwSzxBG5cwU6QW+D2wG4fk74tePJ/o/P/pxI/etyuaAH4Jci3BHReUiseD33hwH2qcKV13uruWqlmwbDh9TNm6zeXmbzb5DyrhWuOFyixsvN2ifaJzRb2NUQ32DymsHHJ7eUeCNToe+vIbu5lG93RnOH5vK6n/P1wE/RMk9f2dLYtHpHGjLgkxmL/25b4FcSnFDKsE/bFXGKNQ7nVe0fUxmzahOArYNh44qm7bZvPC6zd5Oh4G8+8DefvjZ2jxbdhosX2JyxYUmk8ae2Y+sxFE2r7zTpfzH2wU27rM5lnNffcPbibEypWLsrtiepZgl6TsllQNH8B6BfYp+q7+xeW9DLt2Glql78r77c+BmKv4xwleAxnTbn7jVdID2KcIXPlHHwgXpetd2oLNb2fKWzctv2Ow6UNws3PAIuvjnAM2NMH+WwdKLTS6dYzJ14uhnBaalU/3K290OL++x2bTPpvOUu4ehT+sE06dKx4G2hqXXVs0T7C/IITyq8GcC2efuSrf1SRUhPAU3I//bwCLgI9UI0DBg4QKTuR3JmC3YcKjbYeNWh03bbPYccMgWgSNBwZTKF+jrh8073Rzo86bYLJpnsHi+ycw2d5/o0/W5pRINFNwP6m7rtNm8z+atww7dvUPAidp7uprjaB5N5vE/f63CtwXJpttVyKWqRHrf/Vkya18hv/zKDyH8tcKCeA3k7vyluN9L/eJn4rVPPg8HDju8ss3m5dcd9h1y3C1yBdfO8oCnYkMozxtWGjItC8aNEebOEBbONpk33WDqBKGlUajL1N6Dsx13d7Ljfcruo8qbnTZbDzocPKlkC1peTCBeLRGmfYLthLKdGdT6kdomSav5y9gO+uXnOpqfvX5PlufvTrnxEsOQ4aoHcgD1iH4W+AbCxCgAlTpUDLj5eotP3meFrgHLF+D9gw6vbLXZuNUFTr4wDEEHz3nqZFkwsdXd7ve8yQYdU4W2cQYTxgjjW9yEeDNCK4SR40DecT+TcKRXOdar7D+h7Op2eP+4w8Ge4teYAx0bM4REgyMNT4VstPJcuPyOInwdd2QZeO7uZMN5RAACWPVgDoFxCn+K8HmEBsDd994nMHf1w6SJwhc+meHyhX6DZHDQ1TgvveqweZvN/pLGMQgFYqgg4wAUOHbUPWeY0FgHTY0wrsUF0vgWobnR/ezB2Cb3fGOda4wrxb2Xc8qJPugdUPoGoKdf6e51/3r7lb68u6m4imeIimpDmN0CwwdQGllUPq8f0b9H5E9QPfHciurAA1XZQH5SwzmByqPAdGAFYPq8g2KymGHApRebnD9naOjqH4C9+x3+8zWbV7baHOp2P6EkxW3nqk5+TPkalDtV3Y3Ieweh66Ty9kHHfbYBIu6XpTOW6zWWjXR1NU7edjfTdNSTm1DkKZVBtW1Is1ZrWHKIroW6zXgSeBTVE9WKvETDAtCPf9jIqodz4Ka//iXQrsK1gdk8VN1PfV+zxKSlWRjMw573HV7abLN5q01nt2I71Qs+1q1NE54WN9hmlNZ9l95uBQfFzrsGcKTWKL4LJXsmbCebqijq3hqF2ocWGPp+/Cfwl6juBuG5lentnjRVT0WrHs4BGKAfUZFvAvNLQ1dJ4DfdYPHASotjJ5WXNrlD1YHDDoWCC5rgsFe1qh+Oag8eD8sgVf+xl4cU7QrWOc1QbdRgmHPP7VTRr4I+BTjPrRwzbAyMGN/3fjyLIJaiKxD+F3BBqcItzcKty00G8rD5DYdD3Q4Fx+/CVgg6rDOSBO09VxR0rPCB8t7QIzFaw55TjdEfaIdXu6WN7QTbXjago9vwNiL/HYwnFKfw3EeHp3lKVAMFCas+nkOUesfQ+4H/gdCBQKZOaGqCnl53qKLCyE50L9NpoOHwUAxyDvttLhpTaduQBmQpAJOuXR4Q+duwB/gfGPIjlIENIwQPJE21pqQff78Rx9AB4CeI/AXFFR2Dg8rxE+7X/kb1YyNVW92ldM4Apaij+soYxTalbFdlKmvIOjy3ngdQ+QvgJzhaE/BAjQAE8JPvNYEhWdDvIfINYG/JM/G1I0HokuJk0pKWZCq5TeL/HbbtfOAv+CG9YJGpHp322rCM80Cd3XbtBfkG6PdQyW64p3p3PYpqmo1sY2JIoR/0+wIDwNeAC0rXg95A+rB8yLkqBZtKSSWWWaWqCwNAkmc1Yq0WfIC+Dfw5yo+B/hEvEK11dcPoY58uRqvROxH+DJif1uAMGqjRXhC+Fy1pAhIiDPZgOQnHvjYU7YwReUbB+qThiWunn2cnon+s8EtgYMO9tdM8JRqVpIeffrcRRAcQeQL4KsKLaOU+1GE5KeXfmoInrJwI0nKZ0UtZUu2hHFwzHp92HF2fqHZ5LkaWI9H3Fttgg74IfFXVfEJURgU8MEoAAvjpd5pAKCDG08DvITyBO6yFU5p12tWo37Dhoxb6Nv168vT1JAFQwUfH50EPgDwB/B6iTwt2Yf2q2hjMYTSqaVc//XYjjHVs5xgbFf4A+DvgWChzUkdUa0vEFhQwMuOOK/irfFzKelZVbDTzMdC/Q/UPjAnGRo5jr181OppnWPUeLt3zuRwYDqiMBx5A+BIwX43i8xNjGjHnoCJgWD7nKStVbMZzf3RwTyswNbwYlP841m4Ku+7nUWAnwt8gPO44etw0DNbeP/r75ZwWAJXons9nAeqBGxC+osJyoHFUBR085ym/2uCeevdMligeknkC18LaWsXURw5hDfAoos8BA+seGF2t46XTCiCAe76QRVz/ZY4KnwEeRpgZ6hUxjDklErQW4JvG8JZdKw9xZJ5TvDb0A2gfwmOg38Gyd2Gbuu7B0weeUnVOO93+hSxNBthKM8KNwCMIN6nQ4hVYqNDCQJYwpPh40ORJyeBxkjYkpn5peKh6UrkXYR3wLRU2gNUHvax7KPLr7aNGZwRAJfro72TdrBSLWcBDCA+rO6NvxHaI95h0w1yYDREJosQyQrL9YkCV6kVI97I4Kux0tQ4/UJG9osraj4+el5VEZxRAJfroI1mAJoTLFT6Nwe3AFIrr/8s1TWm0prIfvC2valZdk4HqKbNGgFLgsApPInwX4VUgeyaBU6KzAkAAK7+YhZ2NMD83FoNlwMMqLEOYBNEaaXj2hMaXA6HgGE76RxpbK2aYcxCOIKwHHkNYf6g5f3JKX4a1nzzz4ClV96yiFf8liyoiBpNEuFmFFcBNCFMpzmVWeD2e43SGraYDIjHHhJc9IpANnVMVDgHrcAOwa1X0CKBrP3V6jeQkOusAVKKVX84iijgGkxCuBlYiLFdhOmBV/TaXz0Xk8Hh+D3toDDkOM9hjluoUgAMIa1T4OfAyBkdQdM2nzw6NE6SzFkAlWvGVLGKDWrQqLBThdhWWI8wHxpa/h1aNBoIaZEIGJlJhuN6dIpwsGsdrgCcRtrYKPScV1nz27AROic56AHnp7t/PIkqdCrMRrgFuVGEpwmxcIzyFRlK08hNGKTMhNV4DVae1sriLEjaqsAHhJYTdKIOrf+vsBo2XzikAlegjX80CiAVjRZitwtUItwCXqTAFoQkwKr0rJRZkQS3huT5sV3zo2EHI4npTryGsRngZ2G0JJwH9t8+fO8Ap0TkJIC/d9YdZcL20VuA8hCtVWIxwIcIcYHwxQGnFdX56z0jTAqiA0AscV2EXwg6ELep+sOR93M+tO88+cu6BxkvnPIC8tOK/9SFAQaQOoQ1hjsJMhIsR5gJtiLarMBmhEcjgBi1lmEuAFNfVzuPOSXWru7d2F8J7CG8Wpxt2AV1qMYjCs79zboPGS79SAArSXX+cxXSgYNKg0IowBpimoh0I7UAbBu1Ah4rMQGhBqAPqVbAYMtC1qFEGFB3EnUrYr+6nj0qA6UTYo8JB4BTQg+GmkD7z5V8dwATp/wOnskvXzBNCLQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNC0wMi0wNlQxNToxNjoxOCswMDowMMTtKfwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjQtMDItMDZUMTU6MTY6MTgrMDA6MDC1sJFAAAAAIHRFWHRzb2Z0d2FyZQBodHRwczovL2ltYWdlbWFnaWNrLm9yZ7zPHZ0AAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADE5MkBdcVUAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMTky06whCAAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxNzA3MjMyNTc4N+Oa4AAAAA90RVh0VGh1bWI6OlNpemUAMEJClKI+7AAAAFZ0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL21udGxvZy9mYXZpY29ucy8yMDI0LTAyLTA2L2MxOGQ5YzdlMDliMTZlYmE0ZGU4OWU3N2M5NTQxYmIyLmljby5wbmeQO6/JAAAAAElFTkSuQmCC";
let requestBody = new URLSearchParams();
requestBody.append('ApiKey', apiKey);
requestBody.append('Base64Image', imageBase64);
requestBody.append('Phone', phone);
fetch(url, {
method: 'POST',
body: requestBody
})
.then(response => {
functions.logger.log('Whatsapp sent', response.status, response.statusText);
})
.catch(err => functions.logger.log('Error:', err));
});
using Newtonsoft.Json.Linq;
using System.Net.WebSockets;
using System.Text;
namespace WhatabotRealtimeClient
{
class Program
{
private string ApiKey = "YOUR_API_KEY";
private string ChatId = "YOUR_PHONE_NUMBER";
static async Task Main(string[] args)
{
Program prg = new Program();
Console.CursorVisible = false;
await prg.RunWebSocket();
}
private async Task RunWebSocket()
{
var url = new Uri("wss://api.whatabot.io/realtimeMessages");
while (true)
{
try
{
using (var ws = new ClientWebSocket())
{
ws.Options.SetRequestHeader("x-api-key", ApiKey);
ws.Options.SetRequestHeader("x-chat-id", ChatId);
ws.Options.SetRequestHeader("x-platform", "whatsapp");
await ws.ConnectAsync(url, CancellationToken.None);
string connectMessage = "{\"protocol\":\"json\",\"version\":1}\u001e";
await SendMessageAsync(ws, connectMessage);
Console.WriteLine("Connected");
await ReceiveMessages(ws);
}
}
catch (Exception ex)
{
Console.WriteLine("ERROR: " + ex.ToString());
}
Console.WriteLine("Attempting to reconnect...");
await Task.Delay(20000);
}
}
private async Task ReceiveMessages(ClientWebSocket ws)
{
var receiveBuffer = new byte[1024];
while (ws.State == WebSocketState.Open)
{
try
{
var result = await ws.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
var message = System.Text.Encoding.UTF8.GetString(receiveBuffer, 0, result.Count);
try
{
message = message.TrimEnd('\u001e');
var jsonMessage = JObject.Parse(message);
var argumentsArray = jsonMessage["arguments"];
var messageTarget = jsonMessage["target"];
if (messageTarget != null && messageTarget.ToString() == "ReceiveMessage")
{
if (argumentsArray != null && argumentsArray.HasValues && argumentsArray.First is JValue argumentValue)
{
var textInsideArguments = argumentValue.Value?.ToString();
if (textInsideArguments != null && textInsideArguments != string.Empty)
{
//Here I send a WhatsApp message with the text: "Pong: [message received by whatabot]
var responseMessage = "{\"type\":1,\"target\":\"SendMessage\",\"arguments\":[\"" + textInsideArguments + "\"]}";
Console.WriteLine("Message sent: " + "Pong: " + textInsideArguments);
}
}
}
}
catch (Newtonsoft.Json.JsonReaderException)
{
Console.WriteLine("Error parsing the message");
}
}
catch (WebSocketException ex)
{
Console.WriteLine("WebSocket exception: " + ex.Message);
break;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
}
private async Task SendMessageAsync(ClientWebSocket ws, string message)
{
var buffer = Encoding.UTF8.GetBytes(message);
await ws.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
}
}
}
#You have to install websockets first with: pip install websockets
import asyncio
import websockets
import json
import ssl
class WhatabotRealtimeClient:
def __init__(self):
self.api_key = "YOUR_API_KEY"
self.chat_id = "YOUR_PHONE_NUMBER"
self.url = "wss://api.whatabot.io/realtimeMessages"
self.connect_message = json.dumps({"protocol": "json", "version": 1}) + '\u001e'
async def run_websocket(self):
while True:
try:
async with websockets.connect(
self.url,
extra_headers={
"x-api-key": self.api_key,
"x-chat-id": self.chat_id,
"x-platform": "whatsapp"
},
ssl=ssl.create_default_context()
) as ws:
await ws.send(self.connect_message)
print("Connected")
async for message in ws:
await self.receive_message(ws, message)
except Exception as ex:
print("ERROR:", ex)
print("Attempting to reconnect...")
await asyncio.sleep(20)
async def receive_message(self, ws, message):
try:
message = message.rstrip('\u001e')
json_message = json.loads(message)
arguments_array = json_message.get("arguments")
message_target = json_message.get("target")
if message_target == "ReceiveMessage" and arguments_array:
text_inside_arguments = arguments_array[0]
if text_inside_arguments:
response_message = json.dumps({"type": 1, "target": "SendMessage", "arguments": [f"Pong: {text_inside_arguments}"]}) + '\u001e'
await ws.send(response_message)
print("Message sent:", f"Pong: {text_inside_arguments}")
except json.JSONDecodeError:
print("Error parsing the message")
except Exception as ex:
print("Error:", ex)
async def main():
client = WhatabotRealtimeClient()
await client.run_websocket()
if __name__ == "__main__":
asyncio.run(main())