Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,46 @@ public class WebhookExample {
}
```


### How to work with contacts

Link to example: [ContactsMethodsExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/ContactsMethodsExample.java).

```java

@Log4j2
class ContactsMethodsExample {

private void addContact(GreenApi greenApi) {
var addContactReq = AddContactReq.builder()
.chatId("11001234567@c.us")
.firstName("John")
.lastName("Doe")
.build();

var addContactResp = greenApi.contacts.addContact(addContactReq).getBody();
}

private void editContact(GreenApi greenApi) {
var editContactReq = EditContactReq.builder()
.chatId("11001234567@c.us")
.firstName("Jane")
.lastName("Smith")
.build();

var editContactResp = greenApi.contacts.editContact(editContactReq).getBody();
}

private void deleteContact(GreenApi greenApi) {
var deleteContactReq = DeleteContactReq.builder()
.chatId("11001234567@c.us")
.build();

var deleteContactResp = greenApi.contacts.deleteContact(deleteContactReq).getBody();
}
}
```

Since each notification is automatically cast to a java object, you can filter the notification by any field yourself.
A description of the structure of notification objects can be found at this link: [Documentation](https://green-api.com/docs/api/receiving/notifications-format/type-webhook/)
For convenience, all types of hooks and messages are named similarly to the documentation:
Expand Down Expand Up @@ -350,6 +390,7 @@ For convenience, all types of hooks and messages are named similarly to the docu
| How to send a file by URL | [SendFileByUrlExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/SendFileByUrlExample.java) |
| How to send a file by UploadFile + SendByUrl | [UploadFileAndSendByUrlExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/UploadFileAndSendByUrlExample.java) |
| How to receive incoming notifications | [WebhookExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/WebhookExample.java) |
| How to work with contacts | [ContactsMethodsExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/ContactsMethodsExample.java) |

## List of all library methods

Expand All @@ -364,6 +405,9 @@ For convenience, all types of hooks and messages are named similarly to the docu
| `account.qr()` | The method is aimed for getting QR code | [QR](https://greenapi.com/en/docs/api/account/QR) |
| `account.getAuthorizationCode()` | The method is intended to authorize an instance by phone number. The method is used as an alternative to the QR method. | [GetAuthorizationCode](https://greenapi.com/en/docs/api/account/GetAuthorizationCode) |
| `account.setProfilePicture()` | The method is aimed for setting an account picture | [SetProfilePicture](https://greenapi.com/en/docs/api/account/SetProfilePicture) |
| `contacts.addContact()` | The method is aimed for adding a number to contacts | [AddContact](https://green-api.com/en/docs/api/contacts/AddContact) |
| `contacts.editContact()` | The method is used to edit a number in contacts | [EditContact](https://green-api.com/en/docs/api/contacts/EditContact) |
| `contacts.deleteContact()` | The method is used to remove a number from contacts | [DeleteContact](https://green-api.com/en/docs/api/contacts/DeleteContact) |
| `device.getDeviceInfo()` | The method is aimed for getting information about the device (phone) running WhatsApp Business application | [GetDeviceInfo](https://greenapi.com/en/docs/api/phone/GetDeviceInfo) |
| `groups.createGroup()` | The method adds a participant to a group chat. IMPORTANT: If one tries to create a group with a non-existent number, WhatsApp may block the sender's number. | [CreateGroup](https://greenapi.com/en/docs/api/groups/CreateGroup) |
| `groups.updateGroupName()` | The method changes a group chat name | [UpdateGroupName](https://greenapi.com/en/docs/api/groups/UpdateGroupName) |
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<groupId>com.green-api</groupId>
<artifactId>whatsapp-api-client-java</artifactId>
<name>whatsapp-api-client-java</name>
<version>0.2.1</version>
<version>0.2.2</version>
<description>WhatsApp java client Green API</description>
<licenses>
<license>
Expand Down
44 changes: 44 additions & 0 deletions src/main/java/com/greenapi/client/docs/README_RU.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,46 @@ public class WebhookExample {
}
```

### Как работать с контактами

Ссылка на
пример: [ContactsMethodsExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/ContactsMethodsExample.java).

```java

@Log4j2
class ContactsMethodsExample {

private void addContact(GreenApi greenApi) {
var addContactReq = AddContactReq.builder()
.chatId("11001234567@c.us")
.firstName("John")
.lastName("Doe")
.build();

var addContactResp = greenApi.contacts.addContact(addContactReq).getBody();
}

private void editContact(GreenApi greenApi) {
var editContactReq = EditContactReq.builder()
.chatId("11001234567@c.us")
.firstName("Jane")
.lastName("Smith")
.build();

var editContactResp = greenApi.contacts.editContact(editContactReq).getBody();
}

private void deleteContact(GreenApi greenApi) {
var deleteContactReq = DeleteContactReq.builder()
.chatId("11001234567@c.us")
.build();

var deleteContactResp = greenApi.contacts.deleteContact(deleteContactReq).getBody();
}
}
```

Так как каждое уведомление автоматически кастится до java объекта, вы можете фильтровать уведомление по любому полю
самостоятельно.
С описанием структуры объектов уведомлений можно ознакомиться по этой
Expand Down Expand Up @@ -371,6 +411,7 @@ public class WebhookExample {
| Как отправить файл через ссылку | [SendFileByUrlExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/SendFileByUrlExample.java) |
| Как отправить файл через uploadFile + sendByUrl | [UploadFileAndSendByUrlExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/UploadFileAndSendByUrlExample.java) |
| Как получать входящие уведомления | [WebhookExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/WebhookExample.java) |
| Как работать с контактами | [ContactsMethodsExample.java](https://github.com/green-api/whatsapp-api-client-java/blob/master/src/main/java/com/greenapi/client/examples/ContactsMethodsExample.java) |

## Список всех методов библиотеки

Expand All @@ -385,6 +426,9 @@ public class WebhookExample {
| `account.qr()` | Метод предназначен для получения QR-кода | [QR](https://green-api.com/docs/api/account/QR) |
| `account.getAuthorizationCode()` | Метод предназначен для авторизации экземпляра по номеру телефона. Метод используется как альтернатива методу QR. | [GetAuthorizationCode](https://green-api.com/docs/api/account/GetAuthorizationCode) |
| `account.setProfilePicture()` | Метод предназначен для установки аватара аккаунта | [SetProfilePicture](https://green-api.com/docs/api/account/SetProfilePicture) |
| `contacts.addContact()` | Метод предназначен для добавления контакта | [AddContact](https://green-api.com/docs/api/contacts/AddContact) |
| `contacts.editContact()` | Метод предназначен для изменения контакта | [EditContact](https://green-api.com/docs/api/contacts/EditContact) |
| `contacts.deleteContact()` | Метод предназначен для удаления контакта | [DeleteContact](https://green-api.com/docs/api/contacts/DeleteContact) |
| `device.getDeviceInfo()` | Метод предназначен для получения информации об устройстве (телефоне), на котором запущено приложение WhatsApp Business | [GetDeviceInfo](https://green-api.com/docs/api/phone/GetDeviceInfo) |
| `groups.createGroup()` | Метод предназначен для создания группового чата | [CreateGroup](https://green-api.com/docs/api/groups/CreateGroup) |
| `groups.updateGroupName()` | Метод изменяет наименование группового чата | [UpdateGroupName](https://green-api.com/docs/api/groups/UpdateGroupName) |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.greenapi.client.examples;

import com.greenapi.client.pkg.api.GreenApi;
import com.greenapi.client.pkg.models.request.AddContactReq;
import com.greenapi.client.pkg.models.request.EditContactReq;
import com.greenapi.client.pkg.models.request.DeleteContactReq;
import com.greenapi.client.pkg.models.response.AddContactResp;
import com.greenapi.client.pkg.models.response.EditContactResp;
import com.greenapi.client.pkg.models.response.DeleteContactResp;
import lombok.extern.log4j.Log4j2;

import java.util.ArrayList;

@Log4j2
class ContactsMethodsExample {

private void addContact(GreenApi greenApi) {
var addContactReq = AddContactReq.builder()
.chatId("11001234567@c.us")
.firstName("John")
.lastName("Doe")
.build();

var addContactResp = greenApi.contacts.addContact(addContactReq).getBody();
}

private void editContact(GreenApi greenApi) {
var editContactReq = EditContactReq.builder()
.chatId("11001234567@c.us")
.firstName("Jane")
.lastName("Smith")
.build();

var editContactResp = greenApi.contacts.editContact(editContactReq).getBody();
}

private void deleteContact(GreenApi greenApi) {
var deleteContactReq = DeleteContactReq.builder()
.chatId("11001234567@c.us")
.build();

var deleteContactResp = greenApi.contacts.deleteContact(deleteContactReq).getBody();
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/greenapi/client/pkg/api/GreenApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
@Component
public class GreenApi {
public GreenApiAccount account;
public GreenApiContacts contacts;
public GreenApiSending sending;
public GreenApiJournals journals;
public GreenApiGroups groups;
Expand All @@ -25,6 +26,7 @@ public GreenApi(RestTemplate restTemplate,
@Value("${green-api.instanceId}") String instanceId,
@Value("${green-api.token}") String instanceToken) {
this.account = new GreenApiAccount(host, instanceId, instanceToken, restTemplate);
this.contacts = new GreenApiContacts(host, instanceId, instanceToken, restTemplate);
this.sending = new GreenApiSending(host, hostMedia, instanceId, instanceToken, restTemplate);
this.journals = new GreenApiJournals(host, instanceId, instanceToken, restTemplate);
this.groups = new GreenApiGroups(host, instanceId, instanceToken, restTemplate);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.greenapi.client.pkg.api.methods;

import com.greenapi.client.pkg.models.request.AddContactReq;
import com.greenapi.client.pkg.models.request.EditContactReq;
import com.greenapi.client.pkg.models.request.DeleteContactReq;
import com.greenapi.client.pkg.models.response.AddContactResp;
import com.greenapi.client.pkg.models.response.EditContactResp;
import com.greenapi.client.pkg.models.response.DeleteContactResp;
import lombok.AllArgsConstructor;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@AllArgsConstructor
public class GreenApiContacts {
private String host;
private String instanceId;
private String instanceToken;
private RestTemplate restTemplate;

/**
* The method adds a new contact.
* https://greenapi.com/en/docs/api/contacts/AddContact/
*/
public ResponseEntity<AddContactResp> addContact(AddContactReq addContactReq) {

String url = host +
"/waInstance" + instanceId +
"/addContact/" +
instanceToken;

var headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

var requestEntity = new HttpEntity<>(addContactReq, headers);
return restTemplate.exchange(url, HttpMethod.POST, requestEntity, new ParameterizedTypeReference<>() {
});
}

/**
* The method edits an existing contact.
* https://greenapi.com/en/docs/api/contacts/EditContact/
*/
public ResponseEntity<EditContactResp> editContact(EditContactReq editContactReq) {

String url = host +
"/waInstance" + instanceId +
"/editContact/" +
instanceToken;

var headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

var requestEntity = new HttpEntity<>(editContactReq, headers);
return restTemplate.exchange(url, HttpMethod.POST, requestEntity, new ParameterizedTypeReference<>() {
});
}

/**
* The method deletes a contact.
* https://greenapi.com/en/docs/api/contacts/DeleteContact/
*/
public ResponseEntity<DeleteContactResp> deleteContact(DeleteContactReq deleteContactReq) {

String url = host +
"/waInstance" + instanceId +
"/deleteContact/" +
instanceToken;

var headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

var requestEntity = new HttpEntity<>(deleteContactReq, headers);
return restTemplate.exchange(url, HttpMethod.POST, requestEntity, new ParameterizedTypeReference<>() {
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.greenapi.client.pkg.models.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AddContactReq {
private final String chatId;
private final String firstName;
private final String lastName;
private final Boolean saveInAddressbook;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.greenapi.client.pkg.models.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DeleteContactReq {
private final String chatId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.greenapi.client.pkg.models.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class EditContactReq {
private final String chatId;
private final String firstName;
private final String lastName;
private final Boolean saveInAddressbook;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.greenapi.client.pkg.models.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AddContactResp {
private Boolean addContact;
private String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.greenapi.client.pkg.models.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DeleteContactResp {
private Boolean deleteContact;
private String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.greenapi.client.pkg.models.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EditContactResp {
private Boolean editContact;
private String message;
}