Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка работы с чатами #71

Open
edvardpotter opened this issue May 18, 2018 · 9 comments
Open

Поддержка работы с чатами #71

edvardpotter opened this issue May 18, 2018 · 9 comments

Comments

@edvardpotter
Copy link

Планируете ли добавить функционал для работы с amo чатами?

@edvardpotter
Copy link
Author

edvardpotter commented May 18, 2018

Так же предлагаю добавить возможность получать amojo_id опционально, сейчас пришлось внести изменения в файл /src/Request/Request.php:

protected function prepareEndpoint($url)
    {
        if ($this->v1 === false) {
            $query = http_build_query(array_merge($this->parameters->getGet(), [
                'USER_LOGIN' => $this->parameters->getAuth('login'),
                'USER_HASH' => $this->parameters->getAuth('apikey'),
                // Изменение
                'amojo' => 'Y',
                // end
            ]), null, '&');
        } else {
            $query = http_build_query(array_merge($this->parameters->getGet(), [
                'login' => $this->parameters->getAuth('login'),
                'api_key' => $this->parameters->getAuth('apikey'),
            ]), null, '&');
        }

        return sprintf('https://%s%s?%s', $this->parameters->getAuth('domain'), $url, $query);
    }

@dotzero
Copy link
Owner

dotzero commented May 19, 2018

Планирую вместе с переходом на новое API. На базе старого это сделать не представляется возможным.

@dotzero
Copy link
Owner

dotzero commented May 19, 2018

Можете рассказать подробно, что делает amojo ?

@tkachev-o
Copy link
Contributor

tkachev-o commented May 19, 2018

amojo это единый поддомен для работы с API чатов – https://amojo.amocrm.ru/v2/....

@edvardpotter
Copy link
Author

edvardpotter commented May 19, 2018

@dotzero В новой версии не собираетесь использовать Guzzle?
amojo - дополнительный параметр(о котором можно почитать тут) который позволяет получить данные для работы с api чатов(account_id и т.п.). В официальной доке. написано:

UUID, Уникальный идентификатор аккаунта для работы с сервисом онлайн-чатов

У меня получилось сделать реализацию работы с чатами используя вашу библиотеку, и guzzle:

//...
$params['account_id'] = $amo->account->apiCurrent()['amojo_id'];// Получаю account_id для работы с чатами
//...

App::$router->any('/hookw.php', function () use ($params, $client, $amo) {// Хук для получения сообщений из WhatsApp
    require_once __DIR__ . '/../whatsapi.php';
        $data = json_decode(file_get_contents('php://input'), true);
        $message = $data['messages'][0];
        $tmp = explode("@", $message['author']);
        $phone = $tmp[0];
        $body = json_encode([
            'account_id' => $params['account_id']
        ]);
        $signature = hash_hmac('sha1', $body, $params['secret']);
        $headers = [
            "cache-control" => "no-cache",
            "content-type" => "application/json",
            "x-signature" => $signature
        ];
        $options = [
            'body' => $body,
            'headers' => $headers,
        ];
        // Подключаю аккаунт к каналу(чату)
        $response = $client->post('https://amojo.amocrm.ru/v2/origin/custom/' . $params['channel_id'] . '/connect', $options);
        // Scope id для публикации сообщений в аккаунт
        $params['scope_id'] = json_decode($response->getBody(), true)['scope_id'];
        $user_id = QB::table('users')->where('phone', '=', $phone)->first()->id;
        $conversation_id = QB::table('conversations')->where('user_id', '=', $user_id)->first()->id;
        if ($conversation_id) {
            $body = json_encode([
                'event_type' => 'new_message',
                'payload' => [
                    'timestamp' => time(),
                    'msgid' => uniqid(),
                    'conversation_id' => $conversation_id,
                    'sender' => [
                        'id' => $user_id,
                        'avatar' => 'https://www.amocrm.ru/version2/images/logo_bill.png',
                        'name' => $message['senderName'],
                        'profile' => [
                            'phone' => $phone,
                        ],
                        'profile_link' => 'http://example.com',
                    ],
                    'message' => [
                        'type' => 'text',
                        'text' => $message['body']
                    ]
                ]
            ]);
            $headers = [
                "cache-control" => "no-cache",
                "content-type" => "application/json",
                "x-signature" => hash_hmac('sha1', $body, $params['secret'])
            ];
            $options = [
                'headers' => $headers,
                'body' => $body
            ];
            $response = $client->post("https://amojo.amocrm.ru/v2/origin/custom/{$params['scope_id']}", $options);
        }
});

@shift-reality
Copy link

а как вы получаете сообщения из WA?

@dotzero
Copy link
Owner

dotzero commented Jun 1, 2018

В новой версии не собираетесь использовать Guzzle?

Собираюсь

@edvardpotter
Copy link
Author

@shift-reality Написан свой хук для получения сообщений от туда

@shift-reality
Copy link

@edvardpotter а подробнее можете, плиз? также необходима такая возможность просто, реализовали через веб, но глючит....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants