How to set kik bot webhook - bots

I am trying to setup my first test bot in kik messanger , tried to set up webhhok using php:
https://api.kik.com/v1/config?botname:token/?webhook=https://example.com
Please advise, how to set up webhook using php url (For Telegram bot such request works fine).
Thank you

You need to use a POST and not a GET. I used Postman. After setting Basic Auth header with your bot username and API key, then Content-type header to "application/json", I changed the body type to "raw" and just entered in the json data I wanted my config to be:
{
"webhook": [your webhook url here],
"features": {
"receiveReadReceipts": false,
"receiveIsTyping": false,
"manuallySendReadReceipts": false,
"receiveDeliveryReceipts": false
}
}
When I sent the request, the response had my config data returned in the response. This also worked when I needed to change one of the config parameters. Hope this helps.

Related

Can't set webhook to viber bot

I have some troubles with setting webhook to my viber bot. Every time I wanna set my url viber api returns error.
So I am trying to use this in postman:
Url: https://chatapi.viber.com/pa/set_webhook
{
"url": "https://gutapi.ml/api/viber/post",
"event_types":[
"conversation_started"
]
}
When I use code below, viber api returns this result:
{
"status": 1,
"chat_hostname": "SN-CHAT-06_"
}
My url is valid and I have ssl sertificate, but it still does not work. Hope you'll help me
You have Http error: "500 (Internal Server Error)" on any post request. So problem is on your side :)
Try to send POST request to https://gutapi.ml/api/viber/post (your server) with following payload using Postman and look to your logs.
{
"status":0,
"status_message":"ok",
"event_types":[
"conversation_started"
]
}
Also have a look to Viber API documentation for more details:

How to upload video from the API imgur

I'm using imgur API and I have several question, what is the size limit for uploading a .gif ? I read everywhere the size limit of picture is 10Mb and gif are 20Mb but when I try to upload a gif of 11Mb with the API it tells me it's too heavy.
Also Im trying to upload a video (.mp4 , 6,9Mb) and I use the following request with postman
https://api.imgur.com/3/image?client_id={myclientid}
and in the body
video={mavideo.mp4}
but it return me a success with no information
{
"data": {
"errorCode": null,
"ticket": "90c70cdc"
},
"success": true,
"status": 200
}
I have followed the api documentation to make this request
Thank you.
EDIT:
Ok it work if I'm using
https://api.imgur.com/3/upload in postman but when I try to use it with ajax like this
if (fileExtension == "mp4" || fileExtension == "webm"){
form.append('video', file);
} else {
form.append('img', file);
}
$.ajax({
url: 'https://api.imgur.com/3/upload',
headers: {
Authorization: "Client-ID " + ClientId },
type: 'POST',
data: form,
cache: false,
contentType: false,
processData: false
})
I have got the message Access to XMLHttpRequest at 'https://api.imgur.com/3/upload' from origin 'http://localhost:3010' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
What is wrong ?
Not really an answer, but we both seem to be trying to get this working at the same time, so i will share what i found out.
As you seem to have found out also, there are 2 endpoints for uploading, /image and /upload.
When uploading video, /image returns a ticket id. This is probably meant to get the state of the queued processing. There is however no endpoint available where you can send the ticket id and get the state back.
Second endpont, /upload has however another bunch of issues.
While it does return a more useable object with image id and url, it seems to completely ignore the authorization header. Any image that i managed to upload this way has null for the uploaded user, and i don't see it in my account. (using oauth2 and sending Authorization: Bearer <token>) Even if i omit the header completely, it still works even though Authorization is mandatory for uploading.
Another weird thing is, if i don't send the auth header BUT add anything to the query params (so ?some=thing or whatever) it suddenly wakes up and starts requiring the authorization header. When i send it again at this point however, we are back at the beginning and even the /upload endpoint starts sending ticket id and not a reasonable response.
This is a CORS issue and needs to be fixed by the imgur devs. It's only an issue when doing client-side JavaScript as curl works just fine:
echo 'R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' | base64 --decode | curl --location --request POST 'https://api.imgur.com/3/upload' --header "Authorization: Client-ID $CLIENT_ID" -F 'type=file' -F 'disable_audio=0' -F 'image=#-'

Not getting auth headers when setting axios default

I am trying to send an auth header along with an axios POST request from inside a Vue application. I currently am getting a 401 from my back end with an auth header that works when I do a curl.
I've tried splitting it up into variables and putting it in but that did not work and resulted in the same error (401).
This is just the axios code I am trying to get to work. I have checked with console.log and all values I am trying to send exist, though I don't know how to check the axios headers before sending.
axios.defaults.headers.common["Authorization"] = JWTtoken;
axios.post(updateURL, {
token: result.token
});
The backend code can't be changed easily for testing so need to figure out why not sending from the front end
I'd like it to send the correct header along with my request so I don't get a 401 status code.
I think you need this..
axios.defaults.headers.common["Authorization"] = "Bearer " + JWTtoken;
axios.post(updateURL, {
token: result.token
});
Notice that I add Bearer in the Authorization. It is how JWT was meant to be used according to their introduction.
However, if the answer is wrong. Help us by providing more information about your response in Developer Console as #RuChernChong suggest. Any error logs would be helpful as well.
Another way by using Axios globals to set for example X-Auth-Token encoding from JWT.io directly like this:
axios.defaults.headers.common["X-Auth-Token"] = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";

shopify - nodejs - get permanent token fails

I have written an application that talks with the shopify API. I manage to get the temporary code from shopify and redirect back to my app where I store the code to later exchange for the permanent token.
According to the docs all I need to do is then send a POST request to https://{shop}.myshopify.com/admin/oauth/access_token with the client_id, client_secret and code is the body of the request.
I am using the request module to send the request and have it set up to send the request as such:
var options = {
method: POST,
url: https://my-develop-shop.myshopify.com/admin/oauth/access_token,
json: true
};
var _body = {
"client_id": config.get('SHOP_ID'),
"client_secret": config.get('SHOP_SECRET'),
"code": tempCode
}
_body = JSON.stringify(_body);
options.body = _body;
request(options, callback);
However when I send the request it always returns with : error_description: 'Could not find Shopify API application with api_key ' }
The app is installed successfully on the client's shop, so why would this error be returned?
Is there a special header that shopify expects? The docs are so vague.
Why does it not authenticate?
Well I cheated and used the shopify-node-api package. There I just use the exchange_temporary_token method. This api also handles throttling so it's a decent investment in the time you might spend incorporating it.

Monitoring request headers sent by Node.js

So I'm working on a service that calls a subreddit and requests the hottest articles in JSON. Now Reddit likes that anyone using the reddit API modifies their User-Agent Header to be descriptive (here's a link on the format).
So using Node.JS and the Request plugin, I wrote something like this
var subreddit = 'somesupercoolsubreddit';
var stories = '5';
var options ={
url : url.parse(REDDIT_URL+"/r/"+subreddit+"/hot.json"+"?"+"limit="+stories),
headers : {'User-Agent' : 'Super Cool Reddit Service for Local Widgets! by /u/mrkaiser'},
json: true
};
request(options,function(err,response,body){
serverResponse.send(body);
});
But how do I know this worked? Is there some way to know if request header actually got populated or if Reddit got the right User-Agent?
Create another node script that waits for connections and outputs the headers. Change your reddit script to temporarily call the new script and verify the headers.

Resources