2016-01-08 1 views
5

приложение, использующее Ionic и имеющее PHP api для этого приложения.Telegram API с PHP not bot

Нам нужно интегрировать обмен сообщениями Telegram API в этом приложении, мне нужно использовать API, а не бот, так как нам нужно получить контакты пользователей, чтобы они могли отправлять новое личное сообщение.

Я потратил более 7 часов на поиск примеров и документов Telegrams, однако все еще не могу найти способ реализовать это, я хотел знать, может ли кто-нибудь указать мне в правильном направлении.

+0

Я думаю, что у нас есть немного недоразумений здесь. Точка Telegram API - это сделать свое собственное неофициальное приложение для клиентов Telegram! поэтому вам не нужен собственный серверный сервер, и если вы это сделаете, между вашим сервером и сервером Telegram не будет прямой разговора. Существуют только разговоры между клиентом и API Telegram или клиентом и вашим бэкэндом! –

ответ

0

Начало здесь:

1) Сначала нужно создать свой собственный APP_ID, как указано здесь:

https://my.telegram.org/auth

2) Напишите свой собственный код для достижения AUTH_KEY: см мое объяснение здесь:

How to implement authorization using a Telegram API?

3) Изучите исходный код для Webogram, это в основном JavaScript, плюс вы сможете добавлять сообщения console.log, где они вам нужны, чтобы показать вам последовательность шагов, которые вам нужно понять, как работает телеграмма.

4) какой язык разработки вам наиболее удобен, используйте его для создания собственной реализации парсера для преобразования двоичных потоков в типы TL, это типы, которые описывают все в телеграмме.

5) в следующем журнале (из моего модифицированного webogram), который дает последовательность шагов, после получения моих auth_keys:

ID time info log 
121 12:26:35.318 new Auth Auth successfull! dc= 2 mtproto.js:479:15 
127 12:26:35.325 CALL =>> API call help.getNearestDc Object { } Object { dcID: 2, createNetworker: true } mtproto.js:749:4 
128 12:26:35.327 enc-START [invokeWithLayer] 45 mtproto.js:753:7 
168 12:26:35.551 SEND POST XHR http://149.154.167.51/apiw1 [HTTP/1.1 200 OK 708ms] 
189 12:26:36.522 msg-r <<=m [msg_container] Object { _: "msg_container", messages: Array[2] } mtproto.js:1452:5 
190 12:26:36.523 msg-r <<=m [message] Object { _: "message", msg_id: "6242200678614200321", seqno: 1, bytes: 28, body: Object } mtproto.js:1452:5 
191 12:26:36.525 msg-r <<=m [new_session_created] Object { _: "new_session_created", first_msg_id: "6242200671500883244", unique_id: "645797764649391412", server_salt: "17212767594123551779" } mtproto.js:1452:5 
192 12:26:36.526 msg-r <<=m [message] Object { _: "message", msg_id: "6242200678630513665", seqno: 3, bytes: 28, body: Object } mtproto.js:1452:5 
193 12:26:36.528 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200671500883244", result: Object } mtproto.js:1452:5 
257 12:26:39.239 new Auth Auth successfull! dc= 4 mtproto.js:479:15 
270 12:26:59.606 CALL =>> API call auth.sendCode Object { phone_number: "2348022002298", sms_type: 5, api_id: 38665, api_hash: "880c7847a517fc455d7d54731e90ad4e", lang_code: "en-US" } Object { dcID: 2, createNetworker: true } mtproto.js:749:4 
321 12:27:00.048 SEND POST XHR http://149.154.167.51/apiw1 [HTTP/1.1 200 OK 422ms] 
328 12:27:00.981 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200779464550396", result: Object } mtproto.js:1452:5 
331 12:27:00.986 CALL =>> API call auth.sendCode Object { phone_number: "2348022002298", sms_type: 5, api_id: 38665, api_hash: "880c7847a517fc455d7d54731e90ad4e", lang_code: "en-US" } Object { dcID: "4", createNetworker: true, resultType: "auth.SentCode", messageID: "6242200779464550396" } mtproto.js:749:4 
332 12:27:00.987 enc-START [invokeWithLayer] 45 mtproto.js:753:7 
377 12:27:01.288 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 321ms] 
398 12:27:02.170 msg-r <<=m [msg_container] Object { _: "msg_container", messages: Array[2] } mtproto.js:1452:5 
399 12:27:02.171 msg-r <<=m [message] Object { _: "message", msg_id: "6242200787684582401", seqno: 1, bytes: 28, body: Object } mtproto.js:1452:5 
400 12:27:02.172 msg-r <<=m [new_session_created] Object { _: "new_session_created", first_msg_id: "6242200784556418516", unique_id: "13396961033572361155", server_salt: "7076519506215495914" } mtproto.js:1452:5 
401 12:27:02.173 msg-r <<=m [message] Object { _: "message", msg_id: "6242200787775901697", seqno: 3, bytes: 48, body: Object } mtproto.js:1452:5 
402 12:27:02.174 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200784556418516", result: Object } mtproto.js:1452:5 
407 12:27:02.344 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 25154ms] 
414 12:27:03.068 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200779464550396" } mtproto.js:1452:5 
420 12:27:15.639 CALL =>> API call auth.sendSms Object { phone_number: "2348022002298", phone_code_hash: "696b5befd8e809de81" } Object { dcID: "4", createNetworker: true, resultType: "auth.SentCode", messageID: "6242200784556418516" } mtproto.js:749:4 
468 12:27:15.924 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 457ms] 
475 12:27:17.154 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200848242727644", result: true } mtproto.js:1452:5 
482 12:27:27.511 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200848242727644" } mtproto.js:1452:5 
505 12:27:31.003 SEND POST XHR http://149.154.167.51/apiw1 [HTTP/1.1 200 OK 25161ms] 
511 12:27:40.133 CALL =>> API call auth.signIn Object { phone_number: "2348022002298", phone_code_hash: "696b5befd8e809de81", phone_code: "26914" } Object { dcID: "4", createNetworker: true, resultType: "Bool", messageID: "6242200848242727644" } mtproto.js:749:4 
560 12:27:40.454 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 756ms] 
567 12:27:41.223 msg-r <<=m [msg_container] Object { _: "msg_container", messages: Array[2] } mtproto.js:1452:5 
568 12:27:41.224 msg-r <<=m [message] Object { _: "message", msg_id: "6242200956100910081", seqno: 7, bytes: 80, body: Object } mtproto.js:1452:5 
569 12:27:41.225 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200954555850604", result: Object } mtproto.js:1452:5 
570 12:27:41.226 msg-r <<=m [message] Object { _: "message", msg_id: "6242200956751929345", seqno: 9, bytes: 88, body: Object } mtproto.js:1452:5 
571 12:27:41.227 msg-r <<=m [updates] Object { _: "updates", updates: Array[1], users: Array[0], chats: Array[0], date: 1453375666, seq: 2 } mtproto.js:1452:5 
579 12:27:41.758 CALL =>> API call updates.getState Object { } Object { noErrorBox: true } mtproto.js:749:4 
586 12:27:41.842 CALL =>> API call account.updateStatus Object { offline: false } Object { noErrorBox: true } mtproto.js:749:4 
594 12:27:41.850 CALL =>> API call messages.getDialogs Object { offset_date: 0, offset_id: 0, offset_peer: Object, limit: 20 } Object { timeout: 300 } mtproto.js:749:4 
655 12:27:42.965 CALL =>> API call messages.getAllStickers Object { hash: "" } Object { } mtproto.js:749:4 
696 12:27:43.920 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 908ms] 
712 12:27:44.613 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 303ms] 
727 12:27:46.488 msg-r <<=m [msg_container] Object { _: "msg_container", messages: Array[3] } mtproto.js:1452:5 
728 12:27:46.489 msg-r <<=m [message] Object { _: "message", msg_id: "6242200970862778369", seqno: 11, bytes: 36, body: Object } mtproto.js:1452:5 
729 12:27:46.489 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200960159395644", result: Object } mtproto.js:1452:5 
730 12:27:46.490 msg-r <<=m [message] Object { _: "message", msg_id: "6242200970891641857", seqno: 13, bytes: 776, body: Object } mtproto.js:1452:5 
731 12:27:46.492 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200960356118244", result: Object } mtproto.js:1452:5 
732 12:27:46.494 msg-r <<=m [message] Object { _: "message", msg_id: "6242200970897958913", seqno: 15, bytes: 16, body: Object } mtproto.js:1452:5 
733 12:27:46.495 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200960337591900", result: true } mtproto.js:1452:5 
740 12:27:46.567 msg-r <<=m [msg_container] Object { _: "msg_container", messages: Array[4] } mtproto.js:1452:5 
741 12:27:46.568 msg-r <<=m [message] Object { _: "message", msg_id: "6242200970862778369", seqno: 11, bytes: 36, body: Object } mtproto.js:1452:5 
742 12:27:46.569 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200960159395644" } mtproto.js:1452:5 
743 12:27:46.569 msg-r <<=m [message] Object { _: "message", msg_id: "6242200970891641857", seqno: 13, bytes: 776, body: Object } mtproto.js:1452:5 
744 12:27:46.570 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200960356118244" } mtproto.js:1452:5 
745 12:27:46.571 msg-r <<=m [message] Object { _: "message", msg_id: "6242200970897958913", seqno: 15, bytes: 16, body: Object } mtproto.js:1452:5 
746 12:27:46.572 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200960337591900" } mtproto.js:1452:5 
747 12:27:46.573 msg-r <<=m [message] Object { _: "message", msg_id: "6242200973791209473", seqno: 17, bytes: 76, body: Object } mtproto.js:1452:5 
748 12:27:46.574 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200964892679524", result: Object } mtproto.js:1452:5 
754 12:27:46.584 CALL =>> API call messages.getStickerSet Object { stickerset: Object } Object { } mtproto.js:749:4 
811 12:27:47.346 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 539ms] 
818 12:27:48.175 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242200981275507620", result: Object } mtproto.js:1452:5 
857 12:27:49.351 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 25141ms] 
864 12:27:57.219 msg-r <<=m [msgs_ack] Object { _: "msgs_ack", msg_ids: Array[0] } mtproto.js:1452:5 
870 12:28:04.673 CALL =>> API call messages.readHistory Object { peer: Object, max_id: 0 } Object { } mtproto.js:749:4 
908 12:28:04.860 CALL =>> API call messages.getHistory Object { peer: Object, offset_id: 16, add_offset: 0, limit: 20 } Object { timeout: 300, noErrorBox: true } mtproto.js:749:4 
922 12:28:05.713 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 367ms] 
929 12:28:06.096 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242201058769372356", result: Object } mtproto.js:1452:5 
936 12:28:15.702 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242201058769372356" } mtproto.js:1452:5 
977 12:28:16.122 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 25170ms] 
983 12:28:26.637 CALL =>> API call account.updateStatus Object { offline: true } Object { noErrorBox: true } mtproto.js:749:4 
1016 12:28:26.660 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 302ms] 
1023 12:28:27.062 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242201153183272948", result: true } mtproto.js:1452:5 
1030 12:28:41.985 msg-r <<=m [rpc_result] Object { _: "rpc_result", req_msg_id: "6242201153183272948" } mtproto.js:1452:5 
1071 12:28:42.421 SEND POST XHR http://149.154.167.91/apiw1 [HTTP/1.1 200 OK 25165ms] 
+1

Ваш пример не с PHP, автор вопроса спросил PHP-пример –

+0

Да, он смог заставить его работать. Он не интересовался просто копированием, он хотел узнать, как это работает. Концепции обучения не требуют отдельного языка Эми. –

+0

Держу пари, что вопрос не получил ничего. Что он попросил - очень простой пример в формате PHP –