amocrm-rails 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.markdown +395 -32
- data/lib/amocrm-rails.rb +19 -5
- data/lib/amocrm-rails/api_request.rb +10 -10
- data/lib/concern.rb +30 -0
- data/lib/generators/amocrm_rails/install/install_generator.rb +23 -2
- data/lib/generators/amocrm_rails/install/templates/amocrm.yml +2 -5
- data/lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb +33 -0
- data/lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/code.html.erb +6 -0
- data/lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/link.html.erb +6 -0
- data/lib/generators/amocrm_rails/install/templates/devise/config/amocrm.rb +16 -0
- data/lib/generators/amocrm_rails/install/templates/devise/config/initializers/amocrm.rb +8 -0
- data/lib/helper.rb +5 -0
- metadata +8 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62e5324a456fdc52f8455190fdc7c5d55e3cca449c837259366c732e3f11ffc0
|
4
|
+
data.tar.gz: 13cf6d39b9b5c6b824fa53b476aeae5d8e6b056c1b36fb6bdea12e0435624a4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0bc864c80a9adee3e062b17978074dae509ec67a6d656cb7f5989945a7c6981a7b8b0f55e789b1a445567af8c76f4909af156270481b112fb61119ae77be52f
|
7
|
+
data.tar.gz: 7acd4c01f0d42cbc3168f26b2cf2c2589b1a26818c4d624891abde8cc889e65b45d3040d398c56edb3cec73498b026c96e0258136475f964f8488c4e6e442a54
|
data/README.markdown
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
## Оглавление
|
4
4
|
0. [Установка](#install)
|
5
|
+
1. [Упрощенная авторизация](#easy_auth)
|
6
|
+
2. [Авторизация через перенаправления пользователя (требуется gem Devise)](#devise_auth)
|
5
7
|
1. [Параметры аккаунта](#account)
|
6
8
|
2. [Сделки](#leads)
|
7
9
|
1. [Список сделок](#leads_retrieve)
|
@@ -166,9 +168,57 @@
|
|
166
168
|
|
167
169
|
и запустите `bundle install`.
|
168
170
|
|
169
|
-
|
171
|
+
Для упрощенной авторизации:
|
170
172
|
|
171
|
-
|
173
|
+
`rails g amocrm_rails:install`
|
174
|
+
|
175
|
+
Для авторизации через перенаправление пользователя (требуется [gem devise](https://github.com/heartcombo/devise)):
|
176
|
+
|
177
|
+
`rails g amocrm_rails:install --with=devise`
|
178
|
+
|
179
|
+
### Получение CLIENT_ID, CLIENT_SECRET и CODE
|
180
|
+
|
181
|
+
#### <a name="easy_auth"></a> Упрощенная авторизация
|
182
|
+
|
183
|
+
1. Переходим на страницу интеграций https://yourdomain.amocrm.ru/settings/widgets/ и нажимаем "+ СОЗДАТЬ ИНТЕГРАЦИЮ"
|
184
|
+

|
185
|
+
2. Заполняем поля, в первое поле вводим https://yourdomain.com/amocrm и нажимаем "Сохранить"
|
186
|
+

|
187
|
+
3. Переходим на таб "Ключи и доступы". Код авторизации работает 20 минут.
|
188
|
+

|
189
|
+
|
190
|
+
В файл `config/amocrm.yml` вставляем данные.
|
191
|
+
|
192
|
+
#### <a name="devise_auth"></a> Авторизация через перенаправления пользователя (требуется [gem Devise](https://github.com/heartcombo/devise))
|
193
|
+
|
194
|
+
Выполняем все шаги как при [упрощенной авторизации](#easy_auth)
|
195
|
+
|
196
|
+
Ссылка на получение кода:
|
197
|
+
```rhtml
|
198
|
+
<%= link_to "Установить интеграцию",
|
199
|
+
amocrm_oauth_url(state: current_user.try(:id)),
|
200
|
+
class: 'btn btn-primary' %>
|
201
|
+
```
|
202
|
+
Пример доступен по адресу:
|
203
|
+
`
|
204
|
+
https://yourdomain/amocrm/link
|
205
|
+
`
|
206
|
+
|
207
|
+

|
208
|
+
|
209
|
+
Нажимаем на кнопку, логинимся в амо и даём права приложению
|
210
|
+
|
211
|
+

|
212
|
+
|
213
|
+
После вы будуте перенаправлены на страницу https://yourdomain.com/amocrm
|
214
|
+
|
215
|
+

|
216
|
+
|
217
|
+
Если вы увидили код - всё в порядке, копировать код нет необходимости, страницу можно закрыть.
|
218
|
+
|
219
|
+
Если вы не используете [gem Devise](https://github.com/heartcombo/devise), то вам необходимо реализовать в
|
220
|
+
application_controller.rb методы `current_user` для получения текущего пользователя, `user_signed_in?` для проверки
|
221
|
+
авторизован ли посетитель на вашем сайте и `new_user_session_path` для получения пути к странице авторизции.
|
172
222
|
|
173
223
|
Вы можете изменять `timeout`, `open_timeout`, `faraday_adapter`, `proxy`, `symbolize_keys`, `logger`, и `debug`:
|
174
224
|
|
@@ -298,7 +348,7 @@ p(response.body)
|
|
298
348
|
```ruby
|
299
349
|
body = [
|
300
350
|
{
|
301
|
-
source_name: "
|
351
|
+
source_name: "ООО Деппа",
|
302
352
|
source_uid: "a1fee7c0fc436088e64ba2e8822ba2b3",
|
303
353
|
created_at: 1510261200,
|
304
354
|
_embedded: {
|
@@ -315,7 +365,7 @@ body = [
|
|
315
365
|
],
|
316
366
|
companies: [
|
317
367
|
{
|
318
|
-
name: "
|
368
|
+
name: "ООО Деппа"
|
319
369
|
}
|
320
370
|
]
|
321
371
|
},
|
@@ -324,7 +374,7 @@ body = [
|
|
324
374
|
uniq: "a1fe231cc88e64ba2e8822ba2b3ewrw",
|
325
375
|
duration: 54,
|
326
376
|
service_code: "CkAvbEwPam6sad",
|
327
|
-
link: "https://
|
377
|
+
link: "https://deppa.ru",
|
328
378
|
phone: 79998888888,
|
329
379
|
called_at: 1510261200,
|
330
380
|
from: "onlinePBX"
|
@@ -339,7 +389,7 @@ p(response.body)
|
|
339
389
|
```ruby
|
340
390
|
body = [
|
341
391
|
{
|
342
|
-
source_name: "
|
392
|
+
source_name: "ООО Деппа",
|
343
393
|
source_uid: "a1fee7c0fc436088e64ba2e8822ba2b3",
|
344
394
|
created_at: 1590830520,
|
345
395
|
_embedded: {
|
@@ -376,7 +426,7 @@ body = [
|
|
376
426
|
],
|
377
427
|
companies: [
|
378
428
|
{
|
379
|
-
name: "
|
429
|
+
name: "ООО Деппа"
|
380
430
|
}
|
381
431
|
]
|
382
432
|
},
|
@@ -385,7 +435,7 @@ body = [
|
|
385
435
|
form_id: "a1fee7c0fc436088e64ba2e8822ba2b3ewrw",
|
386
436
|
form_sent_at: 1590830520,
|
387
437
|
form_name: "Форма заявки для полёта в космос",
|
388
|
-
form_page: "https://
|
438
|
+
form_page: "https://deppa.ru",
|
389
439
|
referer: "https://www.google.com/search?&q=elon+musk"
|
390
440
|
}
|
391
441
|
}
|
@@ -561,7 +611,7 @@ contacts = response.body[:_embedded][:contacts]
|
|
561
611
|
```ruby
|
562
612
|
params = {
|
563
613
|
filter: {
|
564
|
-
name: "
|
614
|
+
name: "ООО Деппа"
|
565
615
|
}
|
566
616
|
}
|
567
617
|
response = AmocrmRails::Request.companies.retrieve(params: params)
|
@@ -1376,21 +1426,21 @@ tag_id = tags.first[:id]
|
|
1376
1426
|
### <a name="add_tags_to_entity"></a> [Добавление тегов к сущности](https://www.amocrm.ru/developers/content/crm_platform/tags-api#add-tags-to-entity)
|
1377
1427
|
```ruby
|
1378
1428
|
body_item = {
|
1379
|
-
|
1380
|
-
|
1429
|
+
_embedded: {
|
1430
|
+
tags: [
|
1381
1431
|
{
|
1382
|
-
|
1432
|
+
id: tag_id
|
1383
1433
|
}
|
1384
1434
|
]
|
1385
1435
|
}
|
1386
1436
|
}
|
1387
1437
|
body = [
|
1388
1438
|
{
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1439
|
+
id: object_id,
|
1440
|
+
_embedded: {
|
1441
|
+
tags: [
|
1392
1442
|
{
|
1393
|
-
|
1443
|
+
id: tag_id
|
1394
1444
|
}
|
1395
1445
|
]
|
1396
1446
|
}
|
@@ -1417,15 +1467,15 @@ AmocrmRails::Request.contacts(customer_id).update(body: body_item)
|
|
1417
1467
|
|
1418
1468
|
```ruby
|
1419
1469
|
body_item = {
|
1420
|
-
|
1421
|
-
|
1470
|
+
_embedded: {
|
1471
|
+
tags: nil
|
1422
1472
|
}
|
1423
1473
|
}
|
1424
1474
|
body = [
|
1425
1475
|
{
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1476
|
+
id: object_id,
|
1477
|
+
_embedded: {
|
1478
|
+
tags: nil
|
1429
1479
|
}
|
1430
1480
|
}
|
1431
1481
|
]
|
@@ -1591,7 +1641,7 @@ body = [
|
|
1591
1641
|
uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
|
1592
1642
|
duration: 60,
|
1593
1643
|
source: "onlinePBX",
|
1594
|
-
link: "https://
|
1644
|
+
link: "https://deppa.ru",
|
1595
1645
|
phone: "+79999999999"
|
1596
1646
|
}
|
1597
1647
|
},
|
@@ -1602,7 +1652,7 @@ body = [
|
|
1602
1652
|
uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
|
1603
1653
|
duration: 60,
|
1604
1654
|
source: "onlinePBX",
|
1605
|
-
link: "https://
|
1655
|
+
link: "https://deppa.ru",
|
1606
1656
|
phone: "+79999999999"
|
1607
1657
|
}
|
1608
1658
|
},
|
@@ -1624,7 +1674,7 @@ body_item = {
|
|
1624
1674
|
uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
|
1625
1675
|
duration: 60,
|
1626
1676
|
source: "onlinePBX",
|
1627
|
-
link: "https://
|
1677
|
+
link: "https://deppa.ru",
|
1628
1678
|
phone: "+79999999999"
|
1629
1679
|
}
|
1630
1680
|
}
|
@@ -1662,7 +1712,7 @@ body = [
|
|
1662
1712
|
uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
|
1663
1713
|
duration: 60,
|
1664
1714
|
source: "onlinePBX",
|
1665
|
-
link: "https://
|
1715
|
+
link: "https://deppa.ru",
|
1666
1716
|
phone: "+79999999999"
|
1667
1717
|
}
|
1668
1718
|
},
|
@@ -1673,7 +1723,7 @@ body = [
|
|
1673
1723
|
uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
|
1674
1724
|
duration: 60,
|
1675
1725
|
source: "onlinePBX",
|
1676
|
-
link: "https://
|
1726
|
+
link: "https://deppa.ru",
|
1677
1727
|
phone: "+79999999999"
|
1678
1728
|
}
|
1679
1729
|
},
|
@@ -1695,7 +1745,7 @@ body_item = {
|
|
1695
1745
|
uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
|
1696
1746
|
duration: 60,
|
1697
1747
|
source: "onlinePBX",
|
1698
|
-
link: "https://
|
1748
|
+
link: "https://deppa.ru",
|
1699
1749
|
phone: "+79999999999"
|
1700
1750
|
}
|
1701
1751
|
}
|
@@ -1858,7 +1908,6 @@ response = AmocrmRails::Request.customers.transactions(transaction_id).delete
|
|
1858
1908
|
p(response.body)
|
1859
1909
|
```
|
1860
1910
|
### <a name="customer_bonus_points_update"></a> [Списание/начисление бонусных баллов покупателю](https://www.amocrm.ru/developers/content/crm_platform/customers-api#customer–bonus-points-update)
|
1861
|
-
|
1862
1911
|
```ruby
|
1863
1912
|
body = {
|
1864
1913
|
earn: 500
|
@@ -1876,48 +1925,362 @@ status_id = statuses.first[:id]
|
|
1876
1925
|
### <a name="customers_statuses_detail"></a> [Получение статуса покупателей по ID](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customer-status-detail)
|
1877
1926
|
```ruby
|
1878
1927
|
response = AmocrmRails::Request.customers.statuses(status_id).retrieve
|
1928
|
+
status = response.body
|
1929
|
+
```
|
1930
|
+
### <a name="customers_statuses_add"></a> [Добавление статусов в воронку](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-add)
|
1931
|
+
```ruby
|
1932
|
+
body = [
|
1933
|
+
{
|
1934
|
+
name: "Новый статус",
|
1935
|
+
sort: 100,
|
1936
|
+
color: "#fffeb2"
|
1937
|
+
},
|
1938
|
+
{
|
1939
|
+
name: "Новый статус 2",
|
1940
|
+
sort: 200,
|
1941
|
+
color: "#fffeb2"
|
1942
|
+
}
|
1943
|
+
]
|
1944
|
+
response = AmocrmRails::Request.customers.statuses.create(body: body)
|
1945
|
+
p(response.body)
|
1879
1946
|
statuses = response.body[:_embedded][:statuses]
|
1880
1947
|
status_id = statuses.first[:id]
|
1881
1948
|
```
|
1882
|
-
### <a name="customers_statuses_add"></a> [Добавление статусов в воронку](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-add)
|
1883
1949
|
### <a name="customers_statuses_edit"></a> [Редактирование статуса покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-status-edit)
|
1950
|
+
```ruby
|
1951
|
+
body = {
|
1952
|
+
name: "Новое название для статуса",
|
1953
|
+
color: "#c1e0ff"
|
1954
|
+
}
|
1955
|
+
response = AmocrmRails::Request.customers.statuses(status_id).update(body: body)
|
1956
|
+
customer = response.body
|
1957
|
+
```
|
1884
1958
|
### <a name="customer_status_delete"></a> [Удаление статуса покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customer-status-delete)
|
1959
|
+
```ruby
|
1960
|
+
AmocrmRails::Request.customers.statuses(status_id).delete
|
1961
|
+
```
|
1885
1962
|
### <a name="segments_list"></a> [Список сегментов покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segments-list)
|
1963
|
+
```ruby
|
1964
|
+
response = AmocrmRails::Request.customers.segments
|
1965
|
+
segments = response.body[:_embedded][:segments]
|
1966
|
+
segment_id = segments.first[:id]
|
1967
|
+
```
|
1886
1968
|
### <a name="segments_detail"></a> [Получение сегмента покупателей по ID](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-detail)
|
1969
|
+
```ruby
|
1970
|
+
response = AmocrmRails::Request.customers.segments(segment_id).retrieve
|
1971
|
+
segment = response.body
|
1972
|
+
```
|
1887
1973
|
### <a name="segments_add"></a> [Добавление сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-add)
|
1974
|
+
```ruby
|
1975
|
+
body = {
|
1976
|
+
name: "Сегмент для примера",
|
1977
|
+
color: "ae003f"
|
1978
|
+
}
|
1979
|
+
response = AmocrmRails::Request.customers.segments.create(body: body)
|
1980
|
+
p(response.body)
|
1981
|
+
segment = response.body
|
1982
|
+
segment_id = segment[:id]
|
1983
|
+
```
|
1888
1984
|
### <a name="segments_edit"></a> [Редактирование сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-edit)
|
1985
|
+
```ruby
|
1986
|
+
body = {
|
1987
|
+
name: "Новое имя для сегмента",
|
1988
|
+
color: "ae003f"
|
1989
|
+
}
|
1990
|
+
response = AmocrmRails::Request.customers.segments(segment_id).update(body: body)
|
1991
|
+
segment = response.body
|
1992
|
+
```
|
1889
1993
|
### <a name="segment_delete"></a> [Удаление сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-delete)
|
1994
|
+
```ruby
|
1995
|
+
AmocrmRails::Request.customers.segments(segment_id).delete
|
1996
|
+
```
|
1890
1997
|
### <a name="customers_statuses_colors"></a> [Доступные цвета статусов](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-colors)
|
1891
1998
|
### <a name="customers_statuses_colors"></a> [Доступные цвета сегментов](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segments-colors)
|
1892
1999
|
|
1893
2000
|
## <a name="users"></a> [Пользователи](https://www.amocrm.ru/developers/content/crm_platform/users-api)
|
1894
2001
|
### <a name="users_list"></a> [Список пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#users-list)
|
2002
|
+
```ruby
|
2003
|
+
params = {
|
2004
|
+
with: 'group',
|
2005
|
+
page: 0,
|
2006
|
+
limit: 10
|
2007
|
+
}
|
2008
|
+
response = AmocrmRails::Request.users.retrieve
|
2009
|
+
users = response.body[:_embedded][:users]
|
2010
|
+
user_id = users.first[:id]
|
2011
|
+
```
|
1895
2012
|
### <a name="users_detail"></a> [Получение пользователя по ID](https://www.amocrm.ru/developers/content/crm_platform/users-api#user-detail)
|
2013
|
+
```ruby
|
2014
|
+
params = {
|
2015
|
+
with: 'group'
|
2016
|
+
}
|
2017
|
+
response = AmocrmRails::Request.users(user_id).retrieve(params: params)
|
2018
|
+
user = response.body
|
2019
|
+
user_id = user[:id]
|
2020
|
+
```
|
1896
2021
|
### <a name="users_add"></a> [Добавление пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#users-add)
|
2022
|
+
```ruby
|
2023
|
+
body = [
|
2024
|
+
{
|
2025
|
+
name: "Павел Осетров",
|
2026
|
+
email: 'pavel.osetrov@me.com'
|
2027
|
+
}
|
2028
|
+
]
|
2029
|
+
response = AmocrmRails::Request.users.create(body: body)
|
2030
|
+
p(response.body)
|
2031
|
+
users = response.body[:_embedded][:users]
|
2032
|
+
user_id = users.first[:id]
|
2033
|
+
```
|
1897
2034
|
### <a name="roles_list"></a> [Список ролей пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#roles-list)
|
2035
|
+
```ruby
|
2036
|
+
params = {
|
2037
|
+
with: 'users',
|
2038
|
+
page: 0,
|
2039
|
+
limit: 10
|
2040
|
+
}
|
2041
|
+
response = AmocrmRails::Request.roles.retrieve
|
2042
|
+
roles = response.body[:_embedded][:roles]
|
2043
|
+
role_id = roles.first[:id]
|
2044
|
+
```
|
1898
2045
|
### <a name="roles_detail"></a> [Получение роли по ID](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-detail)
|
2046
|
+
```ruby
|
2047
|
+
params = {
|
2048
|
+
with: 'users'
|
2049
|
+
}
|
2050
|
+
response = AmocrmRails::Request.roles(role_id).retrieve(params: params)
|
2051
|
+
role = response.body
|
2052
|
+
role_id = user[:id]
|
2053
|
+
```
|
1899
2054
|
### <a name="roles_add"></a> [Добавление ролей](https://www.amocrm.ru/developers/content/crm_platform/users-api#roles-add)
|
2055
|
+
```ruby
|
2056
|
+
body = [
|
2057
|
+
{
|
2058
|
+
name: "role 3",
|
2059
|
+
rights: {
|
2060
|
+
leads: {
|
2061
|
+
add: "A",
|
2062
|
+
edit: "G",
|
2063
|
+
view: "G",
|
2064
|
+
delete: "G",
|
2065
|
+
export: "G"
|
2066
|
+
},
|
2067
|
+
tasks: {
|
2068
|
+
edit: "A",
|
2069
|
+
delete: "A"
|
2070
|
+
},
|
2071
|
+
contacts: {
|
2072
|
+
add: "A",
|
2073
|
+
edit: "A",
|
2074
|
+
view: "A",
|
2075
|
+
delete: "A",
|
2076
|
+
export: "A"
|
2077
|
+
},
|
2078
|
+
companies: {
|
2079
|
+
add: "A",
|
2080
|
+
edit: "A",
|
2081
|
+
view: "A",
|
2082
|
+
delete: "A",
|
2083
|
+
export: "A"
|
2084
|
+
},
|
2085
|
+
mail_access: true,
|
2086
|
+
status_rights: [
|
2087
|
+
{
|
2088
|
+
entity_type: "leads",
|
2089
|
+
pipeline_id: 16056,
|
2090
|
+
status_id: 20542166,
|
2091
|
+
rights: {
|
2092
|
+
edit: "A",
|
2093
|
+
view: "A",
|
2094
|
+
delete: "A",
|
2095
|
+
export: "A"
|
2096
|
+
}
|
2097
|
+
}
|
2098
|
+
],
|
2099
|
+
catalog_access: true
|
2100
|
+
}
|
2101
|
+
}
|
2102
|
+
]
|
2103
|
+
response = AmocrmRails::Request.roles.create(body: body)
|
2104
|
+
p(response.body)
|
2105
|
+
roles = response.body[:_embedded][:roles]
|
2106
|
+
role_id = roles.first[:id]
|
2107
|
+
```
|
1900
2108
|
### <a name="roles_edit"></a> [Редактирование роли](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-edit)
|
2109
|
+
```ruby
|
2110
|
+
body = {
|
2111
|
+
name: "role 3 modified",
|
2112
|
+
rights: {
|
2113
|
+
contacts: {
|
2114
|
+
add: "A",
|
2115
|
+
edit: "D",
|
2116
|
+
view: "D",
|
2117
|
+
delete: "D",
|
2118
|
+
export: "D"
|
2119
|
+
},
|
2120
|
+
status_rights: nil
|
2121
|
+
}
|
2122
|
+
}
|
2123
|
+
response = AmocrmRails::Request.roles(role_id).update(body: body)
|
2124
|
+
role = response.body
|
2125
|
+
```
|
2126
|
+
|
1901
2127
|
### <a name="roles_delete"></a> [Удаление роли](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-delete)
|
2128
|
+
```ruby
|
2129
|
+
AmocrmRails::Request.roles(role_id).delete
|
2130
|
+
```
|
1902
2131
|
### <a name="users_common_rights"></a> [Общие обозначения прав пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#common-rights)
|
1903
2132
|
### <a name="users_rights_dependence"></a> [Зависимости прав пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#rights-dependence)
|
1904
2133
|
|
1905
2134
|
## <a name="products"></a> [Товары](https://www.amocrm.ru/developers/content/crm_platform/products-api)
|
1906
2135
|
## <a name="webhooks"></a> [Вебхуки](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api)
|
1907
2136
|
### <a name="webhooks_list"></a> [Список установленных вебхуков в аккаунте](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-list)
|
2137
|
+
```ruby
|
2138
|
+
response = AmocrmRails::Request.webhooks.retrieve
|
2139
|
+
webhooks = response.body[:_embedded][:webhooks]
|
2140
|
+
webhook_id = webhooks.first[:id]
|
2141
|
+
```
|
1908
2142
|
### <a name="webhooks_subscribe"></a> [Подписка на вебхук](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhook-subscribe)
|
2143
|
+
```ruby
|
2144
|
+
body = {
|
2145
|
+
destination: "https://deppa.ru",
|
2146
|
+
settings: [
|
2147
|
+
"add_lead"
|
2148
|
+
],
|
2149
|
+
sort: 10
|
2150
|
+
}
|
2151
|
+
response = AmocrmRails::Request.webhooks.create(body: body)
|
2152
|
+
p(response.body)
|
2153
|
+
webhook = response.body
|
2154
|
+
webhook_id = webhook[:id]
|
2155
|
+
```
|
1909
2156
|
### <a name="webhooks_delete"></a> [Отписка от событий](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-delete)
|
2157
|
+
```ruby
|
2158
|
+
AmocrmRails::Request.webhooks(webhook_id).delete
|
2159
|
+
```
|
1910
2160
|
### <a name="webhooks_available_actions"></a> [Возможные событий](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-available-actions)
|
1911
2161
|
|
1912
2162
|
## <a name="widgets"></a> [Виджеты](https://www.amocrm.ru/developers/content/crm_platform/widgets-api)
|
1913
2163
|
### <a name="widgets_list"></a> [Список виджетов](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widgets-list)
|
2164
|
+
```ruby
|
2165
|
+
params = {
|
2166
|
+
page: 0,
|
2167
|
+
limit: 10
|
2168
|
+
}
|
2169
|
+
response = AmocrmRails::Request.widgets.retrieve
|
2170
|
+
widgets = response.body[:_embedded][:widgets]
|
2171
|
+
widget_code = widgets.first[:code]
|
2172
|
+
```
|
1914
2173
|
### <a name="widgets_detail"></a> [Информация о виджете по его коду](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-detail)
|
2174
|
+
```ruby
|
2175
|
+
response = AmocrmRails::Request.widgets(widget_code).retrieve
|
2176
|
+
widget = response.body
|
2177
|
+
```
|
1915
2178
|
### <a name="widgets_install"></a> [Установка виджета в аккаунт](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-install)
|
2179
|
+
```ruby
|
2180
|
+
body = {
|
2181
|
+
login: "example",
|
2182
|
+
password: "eXaMp1E",
|
2183
|
+
script_path: "https://deppa.ru/"
|
2184
|
+
}
|
2185
|
+
response = AmocrmRails::Request.widgets.create(body: body)
|
2186
|
+
p(response.body)
|
2187
|
+
widget = response.body
|
2188
|
+
```
|
1916
2189
|
### <a name="widgets_uninstall"></a> [Удаление установки виджета](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-uninstall)
|
2190
|
+
```ruby
|
2191
|
+
AmocrmRails::Request.widgets(widget_code).delete
|
2192
|
+
```
|
1917
2193
|
### <a name="widgets_continue"></a> [Подтверждение выполнения блока виджета в Salesbot](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-continue)
|
1918
|
-
|
2194
|
+
```ruby
|
2195
|
+
body = {
|
2196
|
+
data: {
|
2197
|
+
status: "success"
|
2198
|
+
},
|
2199
|
+
execute_handlers: [
|
2200
|
+
{
|
2201
|
+
handler: "show",
|
2202
|
+
params: {
|
2203
|
+
type: "text",
|
2204
|
+
value: "Здесь текст"
|
2205
|
+
}
|
2206
|
+
},
|
2207
|
+
{
|
2208
|
+
handler: "show",
|
2209
|
+
params: {
|
2210
|
+
type: "buttons",
|
2211
|
+
value: "Нажми на кнопку",
|
2212
|
+
buttons: [
|
2213
|
+
"1ая кнопка",
|
2214
|
+
"2ая кнопка",
|
2215
|
+
"3ая кнопка",
|
2216
|
+
"4ая кнопка"
|
2217
|
+
]
|
2218
|
+
}
|
2219
|
+
},
|
2220
|
+
{
|
2221
|
+
handler: "show",
|
2222
|
+
params: {
|
2223
|
+
type: "buttons_url",
|
2224
|
+
value: "Кнопки со ссылками",
|
2225
|
+
buttons: [
|
2226
|
+
"https://amocrm.ru",
|
2227
|
+
"https://deppa.ru"
|
2228
|
+
]
|
2229
|
+
}
|
2230
|
+
},
|
2231
|
+
{
|
2232
|
+
handler: "goto",
|
2233
|
+
params: {
|
2234
|
+
type: "question|answer|finish",
|
2235
|
+
step: 5
|
2236
|
+
}
|
2237
|
+
}
|
2238
|
+
]
|
2239
|
+
}
|
2240
|
+
AmocrmRails::Request.salesbot(bot_id).continue(continue_id).create(body: body)
|
2241
|
+
AmocrmRails::Request.marketingbot(bot_id).continue(continue_id).create(body: body)
|
2242
|
+
```
|
1919
2243
|
## <a name="calls"></a> [Добавление звонков](https://www.amocrm.ru/developers/content/crm_platform/calls-api)
|
1920
|
-
|
2244
|
+
```ruby
|
2245
|
+
body = [
|
2246
|
+
{
|
2247
|
+
duration: 10,
|
2248
|
+
source: "example_integration",
|
2249
|
+
phone: "123123",
|
2250
|
+
link: "https://deppa.ru/audio.mp3",
|
2251
|
+
direction: "inbound",
|
2252
|
+
call_result: "Успешный разговор",
|
2253
|
+
call_status: 4
|
2254
|
+
}
|
2255
|
+
]
|
2256
|
+
response = AmocrmRails::Request.calls.create(body: body)
|
2257
|
+
p(response.body)
|
2258
|
+
calls = response.body[:_embedded][:calls]
|
2259
|
+
```
|
1921
2260
|
## <a name="salesbot"></a> [Salebot](https://www.amocrm.ru/developers/content/api/salesbot-api)
|
1922
|
-
|
2261
|
+
```ruby
|
2262
|
+
body = [
|
2263
|
+
{
|
2264
|
+
bot_id: 565,
|
2265
|
+
entity_id: 76687686,
|
2266
|
+
entity_type: 1
|
2267
|
+
}
|
2268
|
+
]
|
2269
|
+
response = AmocrmRails::Request.salesbot.run.create(body: body)
|
2270
|
+
p(response.body)
|
2271
|
+
```
|
1923
2272
|
## <a name="short_links"></a> [Короткие ссылки](https://www.amocrm.ru/developers/content/crm_platform/short_links)
|
2273
|
+
```ruby
|
2274
|
+
body = [
|
2275
|
+
{
|
2276
|
+
url:"https://deppa.ru",
|
2277
|
+
metadata:{
|
2278
|
+
entity_type:"contacts",
|
2279
|
+
entity_id:11070881
|
2280
|
+
}
|
2281
|
+
}
|
2282
|
+
]
|
2283
|
+
response = AmocrmRails::Request.short_links.create(body: body)
|
2284
|
+
p(response.body)
|
2285
|
+
short_links = response.body[:_embedded][:short_links]
|
2286
|
+
```
|
data/lib/amocrm-rails.rb
CHANGED
@@ -2,11 +2,17 @@ require 'amocrm-rails/amocrm_error'
|
|
2
2
|
require 'amocrm-rails/request'
|
3
3
|
require 'amocrm-rails/api_request'
|
4
4
|
require 'amocrm-rails/response'
|
5
|
+
require 'concern'
|
6
|
+
require 'helper'
|
5
7
|
|
6
8
|
module AmocrmRails
|
7
9
|
class << self
|
8
|
-
def generate_access_token(
|
9
|
-
|
10
|
+
def generate_access_token(**options)
|
11
|
+
user_id = AmocrmRails.try(:user_id)
|
12
|
+
client_id = options[:client_id] || AmocrmRails.client_id
|
13
|
+
client_secret = options[:client_secret] || AmocrmRails.client_secret
|
14
|
+
refresh_token = options[:refresh_token] || AmocrmRails.try(:refresh_token)
|
15
|
+
count = options[:count].to_i
|
10
16
|
params = {
|
11
17
|
client_id: client_id,
|
12
18
|
client_secret: client_secret,
|
@@ -30,12 +36,20 @@ module AmocrmRails
|
|
30
36
|
response_token = JSON.parse(response.body)
|
31
37
|
data = YAML.load_file("config/amocrm_token.yml")
|
32
38
|
response_token.each do |k, v|
|
33
|
-
|
34
|
-
|
39
|
+
if user_id.present?
|
40
|
+
data[user_id] = {} if data[user_id].nil?
|
41
|
+
data[user_id][k] = v
|
42
|
+
else
|
43
|
+
data[k] = v
|
44
|
+
end
|
45
|
+
AmocrmRails::register(k.underscore.to_sym, v)
|
35
46
|
end
|
36
47
|
File.open("config/amocrm_token.yml", 'w') { |f| YAML.dump(data, f) }
|
37
48
|
elsif count < 3 && AmocrmRails.refresh_token.present?
|
38
|
-
AmocrmRails.generate_access_token(client_id
|
49
|
+
AmocrmRails.generate_access_token(client_id: client_id,
|
50
|
+
client_secret: client_secret,
|
51
|
+
refresh_token:AmocrmRails.refresh_token,
|
52
|
+
count: count+1)
|
39
53
|
end
|
40
54
|
end
|
41
55
|
|
@@ -14,10 +14,10 @@ module AmocrmRails
|
|
14
14
|
end
|
15
15
|
parse_response(response)
|
16
16
|
rescue => e
|
17
|
-
if e.response.
|
17
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
18
18
|
AmocrmRails.generate_access_token
|
19
19
|
self.post(params: params, headers: headers, body: body, first_time: false)
|
20
|
-
elsif e.response.
|
20
|
+
elsif e.response.dig(:status) == 429
|
21
21
|
sleep(1.second)
|
22
22
|
self.post(params: params, headers: headers, body: body, first_time: false)
|
23
23
|
else
|
@@ -35,10 +35,10 @@ module AmocrmRails
|
|
35
35
|
end
|
36
36
|
parse_response(response)
|
37
37
|
rescue => e
|
38
|
-
if e.response.
|
38
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
39
39
|
AmocrmRails.generate_access_token
|
40
40
|
self.patch(params: params, headers: headers, body: body, first_time: false)
|
41
|
-
elsif e.response.try(:
|
41
|
+
elsif e.response.try(:status) == 429
|
42
42
|
sleep(1.second)
|
43
43
|
self.patch(params: params, headers: headers, body: body, first_time: false)
|
44
44
|
else
|
@@ -56,10 +56,10 @@ module AmocrmRails
|
|
56
56
|
end
|
57
57
|
parse_response(response)
|
58
58
|
rescue => e
|
59
|
-
if e.response.
|
59
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
60
60
|
AmocrmRails.generate_access_token
|
61
61
|
self.put(params: params, headers: headers, body: body, first_time: false)
|
62
|
-
elsif e.response.
|
62
|
+
elsif e.response.dig(:status) == 429
|
63
63
|
sleep(1.second)
|
64
64
|
self.put(params: params, headers: headers, body: body, first_time: false)
|
65
65
|
else
|
@@ -77,10 +77,10 @@ module AmocrmRails
|
|
77
77
|
end
|
78
78
|
parse_response(response)
|
79
79
|
rescue => e
|
80
|
-
if e.response.
|
80
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
81
81
|
AmocrmRails.generate_access_token
|
82
82
|
self.get(params: params, headers: headers, first_time: false)
|
83
|
-
elsif e.response.try(:
|
83
|
+
elsif e.response.try(:status) == 429
|
84
84
|
sleep(1.second)
|
85
85
|
self.get(params: params, headers: headers, body: body, first_time: false)
|
86
86
|
else
|
@@ -98,10 +98,10 @@ module AmocrmRails
|
|
98
98
|
end
|
99
99
|
parse_response(response)
|
100
100
|
rescue => e
|
101
|
-
if e.response.
|
101
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
102
102
|
AmocrmRails.generate_access_token
|
103
103
|
self.delete(params: params, headers: headers, first_time: false)
|
104
|
-
elsif e.response.try(:
|
104
|
+
elsif e.response.try(:stattus) == 429
|
105
105
|
sleep(1.second)
|
106
106
|
self.delete(params: params, headers: headers, body: body, first_time: false)
|
107
107
|
else
|
data/lib/concern.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module AmocrmRails
|
2
|
+
module Concern
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def update_auth_code
|
8
|
+
if user_signed_in?
|
9
|
+
AmocrmRails::register :user_id, current_user.id
|
10
|
+
if File.exist?('config/amocrm.yml')
|
11
|
+
data = YAML.load_file('config/amocrm.yml')
|
12
|
+
return nil if data.dig(Rails.env, current_user.id).nil?
|
13
|
+
data[Rails.env][current_user.id].each do |k, v|
|
14
|
+
AmocrmRails::register k.underscore.to_sym, v
|
15
|
+
end
|
16
|
+
|
17
|
+
if File.exist?('config/amocrm_token.yml')
|
18
|
+
token_data = YAML.load_file("config/amocrm_token.yml")
|
19
|
+
token_data[current_user.id] = {} if data.dig(current_user.id).nil?
|
20
|
+
token_data[current_user.id].each do |k, v|
|
21
|
+
config::register k.underscore.to_sym, v
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
AmocrmRails.generate_access_token if AmocrmRails.access_token.nil? && AmocrmRails.code.present?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -4,10 +4,31 @@ module AmocrmRails
|
|
4
4
|
class InstallGenerator < Rails::Generators::Base
|
5
5
|
source_root File.expand_path('templates', __dir__)
|
6
6
|
|
7
|
+
class_option :with, type: :string, default: ''
|
8
|
+
|
7
9
|
def generate_install
|
8
|
-
|
10
|
+
with = options['with']
|
9
11
|
copy_file 'amocrm_token.yml', 'config/amocrm_token.yml'
|
10
|
-
|
12
|
+
|
13
|
+
if with.to_s.downcase == 'devise'
|
14
|
+
copy_file 'devise/app/controllers/amocrm_controller.rb', 'app/controllers/amocrm_controller.rb'
|
15
|
+
copy_file 'devise/app/views/amocrm/code.html.erb', 'app/views/amocrm/code.html.erb'
|
16
|
+
copy_file 'devise/app/views/amocrm/link.html.erb', 'app/views/amocrm/link.html.erb'
|
17
|
+
copy_file 'devise/config/amocrm.yml', 'config/amocrm.yml'
|
18
|
+
copy_file 'devise/config/initializers/amocrm.rb', 'config/initializers/amocrm.rb'
|
19
|
+
route "get '/amocrm' => 'amocrm#code'"
|
20
|
+
route "get '/amocrm/link' => 'amocrm#link'"
|
21
|
+
route "post '/amocrm/webhook/:name' => 'amocrm#webhook'"
|
22
|
+
|
23
|
+
inject_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-'RUBY'
|
24
|
+
include AmocrmRails::Concern
|
25
|
+
before_action :update_auth_code
|
26
|
+
RUBY
|
27
|
+
end
|
28
|
+
else
|
29
|
+
copy_file 'amocrm.rb', 'config/initializers/amocrm.rb'
|
30
|
+
copy_file 'amocrm.yml', 'config/amocrm.yml'
|
31
|
+
end
|
11
32
|
end
|
12
33
|
end
|
13
34
|
end
|
@@ -2,14 +2,11 @@ defaults: &defaults
|
|
2
2
|
CLIENT_ID: '***'
|
3
3
|
CLIENT_SECRET: '***'
|
4
4
|
CODE: '***'
|
5
|
-
redirect_uri: https://yourdomain.ru
|
5
|
+
redirect_uri: https://yourdomain.ru/amocrm
|
6
6
|
api_endpoint: https://yourdomain.amocrm.ru
|
7
|
-
URL_TOKEN:
|
8
|
-
REDIRECT_URI: 'https://yourdomain.com'
|
7
|
+
URL_TOKEN: https://yourdomain.amocrm.ru/oauth2/access_token
|
9
8
|
production:
|
10
9
|
<<: *defaults
|
11
|
-
URL_TOKEN: 'https://yourdomain.amocrm.ru/oauth2/access_token'
|
12
|
-
REDIRECT_URI: 'https://yourdomain.ru'
|
13
10
|
development:
|
14
11
|
<<: *defaults
|
15
12
|
test:
|
data/lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
class AmocrmController < ApplicationController
|
2
|
+
before_action :authenticate_user!, except: [:webhook]
|
3
|
+
|
4
|
+
def link
|
5
|
+
end
|
6
|
+
|
7
|
+
def code
|
8
|
+
if current_user.id == params[:state].to_i
|
9
|
+
if File.exist?('config/amocrm.yml')
|
10
|
+
data = YAML.load_file('config/amocrm.yml')
|
11
|
+
data[Rails.env][current_user.id] = {} if data[Rails.env][current_user.id].nil?
|
12
|
+
params.each do |k, v|
|
13
|
+
data[Rails.env][current_user.id][k] = v
|
14
|
+
AmocrmRails::register k.underscore.to_sym, v
|
15
|
+
end
|
16
|
+
File.open("config/amocrm.yml", 'w') { |f| YAML.dump(data, f) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
@code = params[:code]
|
20
|
+
end
|
21
|
+
|
22
|
+
def webhook
|
23
|
+
webhook_name = params[:name]
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def authenticate_user!
|
29
|
+
unless user_signed_in?
|
30
|
+
redirect_to new_user_session_path
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'amocrm'
|
2
|
+
|
3
|
+
AmocrmRails.setup do |config|
|
4
|
+
if File.exist?('config/amocrm.yml')
|
5
|
+
processed = YAML.load_file('config/amocrm.yml')[Rails.env]
|
6
|
+
|
7
|
+
processed.each do |k, v|
|
8
|
+
config::register k.underscore.to_sym, v
|
9
|
+
end
|
10
|
+
|
11
|
+
config::Request.timeout = 60
|
12
|
+
config::Request.open_timeout = 60
|
13
|
+
config::Request.symbolize_keys = true
|
14
|
+
config::Request.debug = false
|
15
|
+
end
|
16
|
+
end
|
data/lib/helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amocrm-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Osetrov
|
@@ -52,11 +52,18 @@ files:
|
|
52
52
|
- lib/amocrm-rails/request.rb
|
53
53
|
- lib/amocrm-rails/response.rb
|
54
54
|
- lib/amocrm-rails/version.rb
|
55
|
+
- lib/concern.rb
|
55
56
|
- lib/generators/amocrm_rails/install/USAGE
|
56
57
|
- lib/generators/amocrm_rails/install/install_generator.rb
|
57
58
|
- lib/generators/amocrm_rails/install/templates/amocrm.rb
|
58
59
|
- lib/generators/amocrm_rails/install/templates/amocrm.yml
|
59
60
|
- lib/generators/amocrm_rails/install/templates/amocrm_token.yml
|
61
|
+
- lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb
|
62
|
+
- lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/code.html.erb
|
63
|
+
- lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/link.html.erb
|
64
|
+
- lib/generators/amocrm_rails/install/templates/devise/config/amocrm.rb
|
65
|
+
- lib/generators/amocrm_rails/install/templates/devise/config/initializers/amocrm.rb
|
66
|
+
- lib/helper.rb
|
60
67
|
homepage: https://github.com/osetrov/amocrm
|
61
68
|
licenses:
|
62
69
|
- MIT
|